我正在使用带有打字稿的axios。
我有一个编码如下的简单axios拦截器。
// Add a response interceptor
axios.interceptors.response.use((response: AxiosResponse<any>) => {
// Do something with response data
return response;
}, (error: any) => {
// Do something with response error
// Here "error.response" is undefined.
return Promise.reject(error);
});
我想做的是,未经身份验证时,我需要重定向到其他位置(Identityserver SSO页面,但这与此处无关)。
因此,在调用我的API时,如果未通过正确的位置进行身份验证,则会返回302状态代码。
,但是该axios不会自动重定向到该位置。
如果我必须手动重定向,那还是可以的。
但是我得到的“ error.response”未定义。
那么现在如何重定向?因为“ error.response”未定义,我无法检测状态代码。
在“网络”标签中,其显示如下。
响应选项卡显示如下。没有可用的响应数据... !!!
我在做什么错了?
答案 0 :(得分:2)
据我了解,302代码是由浏览器处理的。回答302之后,浏览器将接收由位置标头传递的页面,并将其传递给Axios。因此,您可以在response.data
中找到html页面。同样在response.request.responseURL
中,您可以找到需要重定向到的URL。
所以我做了这样的事情:
axios.post('.', Data)
.then(response => {
if (response.status === 200) {
window.location.href = response.request.responseURL;
}
})
.catch(error => {console.log(error)});
现在对我有用。
答案 1 :(得分:0)
我认为以下是该问题的答案。还是我不确定。
所以不要标记为答案。
https://www.sean-lan.com/2017/08/15/fetch-meets-302/
Ajax无法处理302个请求... !!!
由浏览器处理... !!!
似乎与以上链接的参考文献相同。