axios实现类似form传值的格式,以及实现拦截器功能,response拦截实现权限判断...

import axios from 'axios'
import Qs from 'qs'

// 超时设置
const service = axios.create({
    transformRequest: [function (data) {
    data = Qs.stringify(data);
        return data;
    }],
    // 请求超时时间
    timeout: 5000   ,
});

//对,就是用qs对aixos进行全局设置,之后在首页引入这个封装好的aixos就好了,传给后台都是类似form的形式
2、这里补充一下,用拦截器给请求头加token
// http request 拦截器
// 每次请求都为http头增加Authorization字段,其内容为token
service.interceptors.request.use(
    config => {
        let cancel
        config.cancelToken = new CancelToken(function executor(c) {
            cancel = c;
        })
        var token = Cookies.get('token');
         config.headers.token = token
         if(token != undefined){
             Auth.setLoginStatus()
        }
        stopRepeatRequest(config.url, cancel)
        return config
    },
    err => {
        return Promise.reject(err);
    }
);
3、针对返回来的数据进行拦截,这里进行权限判断,没权限或者页面不对,就跳到404
// http response 拦截器
// 针对响应代码确认跳转到对应页面
service.interceptors.response.use(
    response => {
        for( let i = 0; i < requestList.length; i++){
            if(requestList[i] == response.config.url){
                // 注意,不能保证500ms必定执行,详情请了解JS的异步机制
                requestList.splice(i,1)
                //异步删除有问题
                // setTimeout(function(){
                //   requestList.splice(i,1)
                //   console.log(requestList,'执行删除了=================')
                // }, 100)

                break
            }
        }
        return Promise.resolve(response.data)
    },
    error => {
        if(axios.isCancel(error)){
            return Promise.reject("Ajax Abort: 该请求在axios拦截器中被中断")
        } else if (error.response) {
            switch (error.response.status) {
                case 401:
                    router.push('error/401');
                case 403:
                    router.push('error/403');
                default:
                    Message({
                        message: `服务器错误!错误代码:${error.response.status}`,
                        type: 'error'
                    })
            }
            return Promise.reject(error.response.data)
        }
    }
);

 

转载于:https://www.cnblogs.com/lmxxlm-123/p/9491994.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值