/**
* axios封装
*
*/
import axios from 'axios';
import utils from '@/utils';
import router from '../router';
import store from '../store/index';
import { Message } from "element-ui";
/**
* 跳转登录页
*
*/
const toLogin = () => {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
});
}
/**
* 提示函数
* @param {*} msg
*
*/
const tip = (msg) => {
Message({
showClose: true,
message: msg,
type: 'error'
});
}
/**
* 请求失败后的错误统一处理
* @param {Number} status 请求失败的状态码
*/
const errorHandle = (status, other) => {
// 状态码判断
switch (status) {
// 401: 跳转登录页
case 401:
toLogin();
break;
case 404:
tip('请求的资源不存在')
break;
case 500:
tip('服务器异常,请稍后重试')
default:
console.log(other);
}}
// 创建axios实例
var instance = axios.create({timeout: 1000 * 15});
// 设置post请求头
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
/**
* 请求拦截器
*
*/
instance.interceptors.request.use(
config => {
const token = store.state.token || utils.cookie.getCookie('token');
const i18n = localStorage.getItem("locale")?(localStorage.getItem("locale") === 'en'? 'en_us' : ''):(localStorage.getItem("defaultLng") === 'en'? 'en_us' : '');
token && (config.headers.token = token);
i18n && (config.headers.i18n = i18n);
return config;
},
error => Promise.error(error))
// 响应拦截器
instance.interceptors.response.use(
// 请求成功
res => {
if(res.data.errorCode == "100406" || res.data.type == 'application/json'){
tip(res.data.msg)
toLogin();
}else if (res.data.errorCode == '100400'){
tip(res.data.msg)
}else if (res.data.errorCode == '100500'){
tip(res.data.msg)
}else if(res.data.errorCode == '100435'){
tip(res.data.msg)
}
if (res.headers.token) {//保存token
store.commit('SET_TOKEN', res.headers.token)
}
return res.status === 200 ? Promise.resolve(res.data) : Promise.reject(res.data)
},
// 请求失败
error => {
const { response } = error;
if (response) {
// 请求已发出,但是不在2xx的范围
errorHandle(response.status, response.data.message);
return Promise.reject(response);
} else {
// 处理其他的情况
}
});
export default instance;
axios请求封装拦截
最新推荐文章于 2024-07-24 15:30:34 发布