废话不多说啊,个人去看代码,写的不详细的不理解的直接私信我,保证不会理你。
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),申明一下不是噶腰子这种危险动作