很多时候我们需要在发送请求和响应数据的时候做一些页面处理,比如在请求服务器之前先判断以下用户是登录(通过token判断),或者设置请求头header,或者在请求到数据之前页面显示loading等等,还有在响应到数据的之后做一些判断,例如服务器返回401登录状态失效,需要重新登录的时候,跳转到登录页,请求成功后关闭页面loading等,这个时候我们就可以用到axios拦截器来做这一系列的事情。
axios拦截器分为请求拦截器和响应拦截器两种。
请求拦截器
axios.interceptors.request.use(config => {
// 在发送请求之前做些什么,例如加入token
.......
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
响应拦截器
axios.interceptors.response.use(function (response) {
// 在接收响应做些什么,例如跳转到登录页
......
return response;
}, function (error) {
// 对响应错误做点什么
return Promise.reject(error);
});
完整代码:
export function request(config) {
// 1、创建axios实例
const instance = axios.create({
baseURL: "http://106.54.54.237:8000/api/v1",
timeout: 10000
});
// 2、axios的请求拦截器
instance.interceptors.request.use(
req => {
Toast.loading({
// loading的时候禁止点击
forbidClick: true,
message: "加载中..."
});
return req; //拦截完再发送出去
},
err => {
return Promise.reject(err);
}
);
// 3、axios的响应拦截器
instance.interceptors.response.use(
res => {
// 保证最少500毫秒的加载时间
setTimeout(() => {
Toast.clear();
}, 500);
return res.data; //拦截完再返回数据
},
err => {
return Promise.reject(err);
}
);
//发送真正的请求
return instance(config);
}
https://blog.csdn.net/weixin_39378691/article/details/83750056