返回信息错误提示码处理
/** @format */
import axios from 'axios';
import Vue from 'vue';
import store from '@/store';
// import { CONSOLE_REQUEST_ENABLE, CONSOLE_RESPONSE_ENABLE } from '../index';
const CancelToken = axios.CancelToken;
let CancelPromise = {};
/**
* 请求成功拦截器
* @param req 请求参数
* @returns {*}
*/
export function requestSuccessFunc(req) {
if (CancelPromise[req.url]) {
CancelPromise[req.url]();
}
req.cancelToken = new CancelToken(c => {
CancelPromise[req.url] = c;
});
// CONSOLE_REQUEST_ENABLE &&
// console.info('requestInterceptorFunc', `url:${req.url}`, req);
// 自定义请求拦截逻辑,处理权限,请求发送监控等
return req;
}
/**
* 请求失败拦截器
* @param reqError 失败信息
* @returns {Promise.<*>}
*/
export function requestFailFunc(reqError) {
// 自定义请求失败逻辑,处理断网,请求发送监控等
return Promise.reject(reqError);
}
/**
* 响应成功拦截器
* @param res 返回数据
* @returns {*}
*/
export function responseSuccessFunc(response) {
// 自定义响应成功逻辑,全局拦截接口,根据不同业务做不同处理,响应成功监控等
// CONSOLE_RESPONSE_ENABLE && console.info('responseInterceptorFunc', response);
if (response && response.data.code === 401) {
// router.replace({ name: 'login' });
store.dispatch('user/ACTIONS_LOGOUT');
} else if (response && response.data.code === 0) {
return (response.data && response.data.data) || response.data.msg;
} else if (response && (response.data.token || response.data.contextId)) {
return response.data;
} else {
// 异常处理
Vue.prototype.$toast(response.data.msg);
// Vue.prototype.$toast.fail(response.data.msg);
// console.log('warning', response.data.msg || response.data.message);
return Promise.reject(response && response.data);
}
}
/**
* 响应失败拦截器
* @param resError 失败信息
* @returns {Promise.<*>}
*/
export function responseFailFunc(resError) {
let errData = {};
if (resError.toString() === 'Cancel') {
errData = { isCancel: true };
return Promise.reject(errData);
}
// 响应失败且不是取消请求,可根据resError信息做监控处理
console.info('响应失败', resError);
switch (resError.response.status) {
case 500:
console.log('接口错误!!!接口地址:' + resError.response.config.url);
errData = {
msg: '接口错误!!!接口地址:' + resError.response.config.url
};
break;
case 400:
// 接口400错误码时弹出返回错误信息
Vue.prototype.$toast.fail({
message: '错误码400:' + resError.response.data.msg
});
errData = {
data: resError.response.data.data
};
break;
case 404:
sessionStorage.clear();
store.commit('user/STORE_PARAMS', {});
break;
case 403:
case 502:
// 接口403错误码时返回登录页面
// router.replace({ name: 'login' });
store.dispatch('user/ACTIONS_LOGOUT');
errData = {
data: resError.response.data.data
};
break;
default:
Vue.prototype.$toast.fail({
message: '未知错误,请联系管理员,错误码:' + resError.response.status
});
errData = {
data: resError.response.data.data
};
break;
}
return Promise.reject(errData);
}