axios是干嘛的?
axios就是一个能对服务器发起http请求
1.可以进行拦截请求和响应拦截
2.转换请求数据和响应数据
3.可以取消数据请求
4.可以自动转化JSON数据
5.可以进行二次封装和防止重复请求数据
一共有几种请求类型
1.get请求
1.post请求
1.put请求
1.deletet请求
设置http请求接口
请求头使用baseURL:
const instance = axios.create({
baseURL: "http://47.93.101.203",
timeout: 10000,
});
响应的状态使用:(status/statusText)
一般来说一个请求路径可以对应多个相同的多个请求类型(get/post/put/delete)
使用qs转换
用于来判断类型判断是否需要去转换成为字符串
instance.interceptors.request.use(
function (config) {
// qs转换
config.data =
config.data instanceof FormData ? config.data : qs.stringify(config.data);
return config;
},
function (error) {
return Promise.reject(error);
}
);
登录的时候判断一下状态码
我们在登录的时候接口会返回一个状态值,我们在axios中去判断状态值是否是正确的
下面这段代码是判断登录的时候状态码和token失效时的状态码(每个接口的状态码都不一样)
function (response) {
if (response.status == 200) {
if (response.status == 410000) {
localStorage.removeItem("token");
router.replace({
path: "login",
query: { redirect: router.currentRoute.fullPath },
});
}
}
return response;
},
请求网络判断
我们在是用的时候没有网络是加载不出来数据的,没有网络的时候我们会提示你的网络断开
下面的这段代码就是检测是否有网络,没有网络会提示
function (error) {
if (error.message == "Network Error") {
Dialog.confirm(
// 弹出窗
{ message: "网络错误,请检查服务端,请【点击重试】!", title: "提示" },
{
// 点击重新获取检测是否有网络
confirmButtonText: "点击重试",
type: "warning",
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
}
).then(() => {
tautology(error);
});
}
return Promise.reject(error);
}
组合代码
instance.interceptors.response.```
use(
function (response) {
// 判断状态码
if (response.status == 200) {
// 状态码登录410000退出登录
if (response.status == 410000) {
localStorage.removeItem("token");
router.replace({
path: "login",
query: { redirect: router.currentRoute.fullPath },
});
}
}
return response;
},
function (error) {
if (error.message == "Network Error") {
Dialog.confirm(
// 弹出窗
{ message: "网络错误,请检查服务端,请【点击重试】!", title: "提示" },
{
// 点击重新获取检测是否有网络
confirmButtonText: "点击重试",
type: "warning",
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
}
).then(() => {
tautology(error);
});
}
return Promise.reject(error);
}
);
复制代码
二次请求
在上面的代码可以看到请求不到网络的时候点击重试会触发下面这段封装的二次请求
复制代码
function tautology(err) {
let back = new Promise(function (resolve) {
resolve();
});
return back.then(function () {
return instance(err.config);
});
}
复制代码
请求完整代码
vant2的网址:https://vant-contrib.gitee.io/vant/v2
axios的网址:http://www.axios-js.com/docs/
复制代码
import router from "@/router";
import axios from "axios";
import qs from "qs";
import { Dialog } from "vant";
const instance = axios.create({
baseURL: "http://47.93.101.203",
timeout: 10000,
});
instance.interceptors.request.use(
function (config) {
config.data =
config.data instanceof FormData ? config.data : qs.stringify(config.data);
return config;
},
function (error) {
return Promise.reject(error);
}
);
instance.interceptors.response.use(
function (response) {
if (response.status == 200) {
if (response.status == 410000) {
localStorage.removeItem("token");
router.replace({
path: "login",
query: { redirect: router.currentRoute.fullPath },
});
}
}
return response;
},
function (error) {
if (error.message == "Network Error") {
Dialog.confirm(
{ message: "网络错误,请检查服务端,请【点击重试】!", title: "提示" },
{
confirmButtonText: "点击重试",
type: "warning",
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
}
).then(() => {
tautology(error);
});
}
return Promise.reject(error);
}
);
function tautology(err) {
let back = new Promise(function (resolve) {
resolve();
});
return back.then(function () {
return instance(err.config);
});
}
export default instance;