axios请求封装拦截

/**
 * 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;

猜你喜欢

转载自blog.csdn.net/weixin_43869524/article/details/91492144