我有一种从服务器获取数据的方法,基本上只是另一个GET请求。但是,我使用transformResponse
来修改数据以满足我的需要。
我还有拦截器来处理401错误响应。
问题是,当服务器在我的GET请求上发送401响应时,transformResponse
代码将运行并尝试修改服务器响应,这显然不是transformResponse
所期望的。这会导致拦截器收到JavaScript错误并且无法获得完整的http响应(error.response返回未定义)的情况。
这是两个代码示例。
从服务器获取数据:
findOak() {
console.log('find oak')
return axios.get(`${baseURL}/`, {
params: {
is_oak: true
},
transformResponse: (response) => {
console.log('transformResponse')
return companyTransformer(response.data[0])
}
}).then(response => response.data)
}
设置拦截器:
axios.interceptors.response.use(
response => response,
error => {
console.log('interceptor')
console.log(error.response)
if (error.response && error.response.status === 401 && authenticated()) {
logout()
window.location.href = '/'
} else {
return Promise.reject(error)
}
}
)
因此error.response
是未定义的,而不是服务器响应中包含错误Uncaught (in promise) TypeError: Cannot read property '0' of undefined
,它发生在transformResponse中。
如何处理此案?