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;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值