axios.interceptors.response.use(
(response) => {
return response
}, async (error) => {
const instance = axios.create({
baseURL: 'myrestbase',
timeout: 1000,
headers: {
'Authorization': 'Bearer TOKEN HERE',
'Accept' : 'application/json',
'Content-Type' : 'application/json'
}
})
if(error.response.status == 401){
await instance.post('/token/refresh').then(tokenResponse => {
if(tokenResponse.data.status){
error.config.headers['Authorization'] = 'Bearer ' + tokenResponse.data.raw_token
return axios(error.config)
// router.go(router.currentRoute)
}else{
ElMessage({
message: 'Your session has expired! Please login again.',
type: 'warning'
})
logout()
}
}).catch(error => {
logout()
})
}
})
我的拦截器看起来像预期的那样工作。如果请求得到401响应(令牌过期),我会刷新令牌。成功后,对于新的令牌,我想用更新后的令牌完成原始请求,我正在尝试使用axios(error.config)。这工作正常.但原始请求响应出现undefined
。
axios.get('/original_request', {
params: payload
}).then(response => {
console.log(response)
})
我可以通过我已经注解掉的router.go(router.currentRoute),大多数人不会识别Vuejs中的路由重新加载。我真的希望它是无缝的,特别是如果它是一个POST请求,用户输入表单字段等。
任何人都有任何建议,我如何才能得到数据的响应,而不是undefined
?
1条答案
按热度按时间dy1byipe1#
因此,经过一些不同的测试,我意识到我需要将我试图做的事情转移到响应200回调中。
这让我完成了最初的请求
无干扰地工作,刷新令牌是无声的。