axios使用中的奇技淫巧

response拦截器自动刷新token并重新发起请求

业务场景:后台api接口返回code:-2 就代表着token不存在或者失效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// respone拦截器
service
.interceptors
.response
.use(response => {
const res = response.data
if (response.data.code === -2) {
const originalRequest = response.config//获取请求的config配置
const token = sessionStorage.getItem('token')
if (token && token !== '') { //token不存在的时候,会在router before中获取,这里只针对token失效的情况
return getToken().then(async(data) => { //重新获取token
sessionStorage.setItem('token', data.data.token)
originalRequest.params.token = data.data.token
//由于Promise对象不支持返回值,这里选用了es新特性 async await 关键字
let res = await axios(originalRequest)
return res.data
})
}
}

if (res.code !== 0 && res.code !== -2) {
Toast({mes: res.msg, timeout: 1500, icon: 'error'})

return Promise.reject('error')
} else {
return response.data
}
}, error => {
Toast({mes: error, timeout: 1500, icon: 'error'})

return Promise.reject(error)
})
HyruleTeam wechat
前端手艺工坊