Axios响应拦截器未传递响应数据,Vuejs

xytpbqjk  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(232)
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

dy1byipe

dy1byipe1#

因此,经过一些不同的测试,我意识到我需要将我试图做的事情转移到响应200回调中。
这让我完成了最初的请求

axios.interceptors.response.use( async (response) => {
    
    if(response.status === 202){

      await axios(response.config).then(originalResponse => {
         response.data = originalResponse.data
         response.status = originalResponse.status
         response.statusText = originalResponse.statusText
         return response
      }).catch(error => {

      })

    }

    return response

}

无干扰地工作,刷新令牌是无声的。

相关问题