/**axios封装
* 请求拦截、相应拦截、错误统一处理
*/
import axios from 'axios'
import { MessageBox } from 'element-ui'
import 'core-js';
import promiseFinally from 'core-js/features/promise/finally';
if(!window.Promise.prototype['finally']){
window.Promise.prototype['finally'] = promiseFinally;
}
const axiosService = axios.create({
baseURL: '/api/manage', // url = base url + request url
headers: {
'Cache-Control': 'no-cache, no-store',
'Pragma': 'no-cache'
},
timeout: 6 * 60 * 1000 // 超时时间
})
// request interceptor
axiosService.interceptors.request.use(
config => {
const separator = config.url.indexOf('?') === -1 ? '?' : '&';
config.url = config.url + separator +"noCache="+new Date().getTime();//防止浏览器缓存
return config
},
error => {
return Promise.reject(error)
}
);
let messageInstance = null;
const resetMessage = (params) => {
if(messageInstance) {
if(messageInstance.close) messageInstance.close()
}
messageInstance = MessageBox({
title: params.title,
type: params.type,
message: params.message,
confirmButtonText: '确定',
callback: () => {
if(params.callback){
console.log(params);
params.callback()
}
}
})
}
// response
axiosService.interceptors.response.use(
response => {
const data = response.data
if(data.code == 410){ //未登录,跳转登录页
resetMessage({
title:'登录超时',
type:'warning',
message: data.msg,
callback: () => {
window.history.pushState({},'','/login');
}
})
return data;
} else if(data.code == 401){ //无权限
window.history.pushState({},'','/401');
return data;
} else if(data.code !== 200){
resetMessage({
title:'错误',
type:'error',
message: data.msg,
callback: () => {
}
})
return Promise.reject(new Error(data.msg))
} else {
return data;
}
},
error => {
resetMessage({
title:'错误',
type:'error',
message: error.message,
callback: () => {
// window.history.pushState({},'','/login');
}
})
return Promise.reject(error);
}
)
const axiosPromiseFinally = require('promise.prototype.finally');
axiosPromiseFinally.shim();
export default axiosService
axios 拦截错误
最新推荐文章于 2024-08-18 03:50:35 发布