未定义 302 状态 axios 的响应

Posted

技术标签:

【中文标题】未定义 302 状态 axios 的响应【英文标题】:Response undefined for 302 status axios 【发布时间】:2019-06-27 06:50:58 【问题描述】:

我正在使用带有 typescript 的 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);
);

我想要做的是在未经身份验证时需要重定向到其他位置(身份服务器 SSO 页面,但我猜这与这里无关)。

所以当调用我的 API 时,如果没有通过正确的位置进行身份验证,则会返回 302 状态代码。

但是 axios 不会自动重定向到那个位置。

如果我必须手动重定向,那仍然可以。

但我将“error.response”视为未定义。

那么现在我该如何重定向?因为“error.response”未定义,我无法检测到状态码。

在网络选项卡中显示如下。

响应选项卡显示以下内容。没有可用的响应数据...!!!

我做错了什么?

【问题讨论】:

console.log(error)你看到了什么? 错误:在 XMLHttpRequest.handleError (xhr.js?b50d:87) 的 createError (createError.js?2d83:16) 处出现网络错误 所以console.dir(error),打开属性并尝试在那里找到状态 我这样做了,它不起作用。 【参考方案1】:

据我了解,302 代码由浏览器处理。回答 302 后,浏览器会收到 location header 传递的页面,并将其传递给 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));

现在对我有用。

【讨论】:

以上是关于未定义 302 状态 axios 的响应的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:使用状态时无法读取未定义的属性“0”

Vuex:Axios GET 请求在组件内部返回未定义

带有 Vuex 和 Axios 的 NativeScript-Vue 未定义状态错误

Axios ReactJS - 无法读取未定义的属性“setState”

无法读取未定义的属性“推送”-vue 和 axios

在 VueJS 中使用 Axios - 这个未定义