基于Axios全局管理配置完成:Axios全局管理 - 简书
1、在http.js中引入vuex,并引入UI组件用作于消息提示
import store from '../store/index'; // 引入vuex
import iView from 'view-design'; // 引入iView
2、在https.js中的request拦截器加入登录状态处理
service.interceptors.request.use(
config => {
store.state.globalLoading = true; // globalLoading为vuex中设置的全局加载动画
// 将globalLoading开始设置为true,请求开始,动画开始执行
return config;
},
error => {
store.state.globalLoading = false; // 请求发出时出错,停止全局动画的加载,globalLoading设置为false
Promise.reject(error);
}
)
3、在http response 拦截器中根据返回的结果来停止全局动画(globalLoading)停止(false)
对所有错误信息统一通知
如果项目有token校验,在返回结果中发现token过期,则需要触发另一个状态(是否需要重新登录),以免发起多余请求
service.interceptors.response.use(
config => {
store.state.globalLoading = false; // 接口正常返回,需要停止全局动画
return config;
},
error => {
store.state.globalLoading = false; // 出现错误,需要停止全局动画
// IfReloadLogin 是在vuex中定义的是否需要重新登录的变量
if(store.state.IfReloadLogin) {
store.state.IfReloadLogin = false;
}else{
if (res.status == '401') { // 401是token失效的标识,实际需要跟后台沟通
store.state.IfReloadLogin = true;
}else{
store.state.IfReloadLogin = false;
}
iView.Message.warning(res.data.Message); // 对于错误信息统一提示,不做单独处理
return Promise.reject(res.data)
}
}
)