axios实现token过期时自动重新刷新,并让之前的请求重新再发一次请求,实现请求重发,而让调用的的人无感

废话不多说啊,个人去看代码,写的不详细的不理解的直接私信我,保证不会理你。

import axios from 'axios';
import router from '../router'
import {getAuth} from "../api/apis";

let instance = axios.create({
  baseURL: 'http://localhost:8090/chess',
  timeout: 15000, //请求超时
  headers: {
    'Content-Type': 'application/json'
  }
});
let token = 'QQQ';
let refresh = false
let errorList = []
instance.interceptors.request.use((config) => {
  if (token) {
    config.headers.token = token;
  } else {
    router.push({path: ''})
  }
  return config
})
instance.interceptors.response.use((response) => {
  return new Promise((resolve, reject) => {
    // 没有权限访问,那就将它丢到errorList数组中
    if (response.data.code === 2) {
    // 就是将当前的resolve给保存下来,而不是去执行它,只要理解这点你就成功的学会写js了。我这里是给他保存在函数里,到要用的时候用它
      errorList.push((func) => {
        if (func && typeof func === 'function') {
          func(response, resolve)
        } else {
          reject("错误")
        }
      })
      if (!refresh) {
        // 这里时只发送一次刷新权限的接口
        handleError()
        // 记住,这里要like给他整成true,不然后边的请求就进来了
        refresh = true
      }
    } else {
      resolve(response.data)
    }
  })
})

function handleError() {
  getAuth().then(res => {
    // 这里刷新了就要恢复成原样,以免在这个权限刷新的时候后续的请求也出现没有权限导致无法再次发起刷新请求
    refresh = false
    const data = res.data
    errorList.forEach(fun => {
      fun((response, resolve) => {
        // 这里替换只是一个示例,可以换成设置token,我还有一篇也是关于这个的,可以去自己找
        response.config.url = response.config.url.replace('?type=3', '?type=' + data)
        // instance(response.config) 重新发起请求
        // 还记得之前说的那个resolve吗?下边这个resolve就是上边保存下来的,这个resolve和上边那个是同一个。
        // 要是理解不了那就call my phone 19971386624,给你在线答疑,别问我为什么,因为我开了个烧烤店,没客流量,就让你来吃烧烤的
        resolve(instance(response.config))
      })
    })
    // 清空数组,免得越堆越多内存消耗
    errorList = []
  })
}

export default instance

好了我要睡了,我的人生就这样,吃了睡,睡了吃!!!!另外说一下,我真的没干开发了,因为我想当老板,有兴趣的可以和我合作 电话微信同号(19971386624),申明一下不是噶腰子这种危险动作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值