这个axios全局拦截代码是干什么的

import axios from 'axios';
//取消请求
let CancelToken = axios.CancelToken
axios.create({
    timeout: 15000 ,// 请求超时时间
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
})
 
//开始请求设置,发起拦截处理
axios.interceptors.request.use(config => {
    //得到参数中的requestname字段,用于决定下次发起请求,取消相应的  相同字段的请求
    //post和get请求方式的不同,使用三木运算处理
    let requestName = config.method === 'post'?config.data.requestName :config.params.requestName
    //判断,如果这里拿到上一次的requestName,就取消上一次的请求
    if(requestName) {
        if(axios[requestName]&&axios[requestName].cancel){
            axios[requestName].cancel()
        }
        config.cancelToken = new CancelToken(c => {
            axios[requestName] = {}
            axios[requestName].cancel = c
        })
    }
    return config
}, error => {
    return Promise.reject(error)
})
// respone拦截器
axios.interceptors.response.use(
    response => {
        const res = response.data;
 
        //这里根据后台返回来设置
        if (res.msg === "success") {
            return response.data;
        } else {
            return Promise.reject(error);
        }
    },
    error => {
        return Promise.reject(error)
    }
)
 
export default axios

出自这里,作者说在这里处理axios跨域问题,没看懂
第一部分的拦截代码也没看懂,为什么要取消上一次请求

阅读 3.6k
3 个回答

当你每个请求都要加上相同的请求头比如说token,或者大部分请求成功或失败要给出全局提示的时候就要用到了。

在请求后台数据时候,我们需要统一的处理一些事情,譬如为每一次请求添加 token,添加 jwt 验证,每一个返回体的解析处理。

如果不嫌麻烦,每一位人员,可以自己写,但是那样的代码显然是很冗余的,所以抽取出来做成一个统一的处理,那么可以省时省力,何乐而不为呢?

这里没有处理跨域,按照代码来看,axios.interceptors.request.use这里处理的重复请求的情况下取消历史的相同请求,避免重复获取数据;axios.interceptors.response.use这里是很常见的response异常处理。
很显然,你应该找错文件了。可以的话贴源码地址。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题