如果 Axios 请求失败,则 error.response 未定义

error.response is undefined if axios request fails

提问人:Alexey Starinsky 提问时间:11/13/2018 最后编辑:Alexey Starinsky 更新时间:7/23/2020 访问量:36254

问:

如果 axios 请求在我的 Vue.js 应用程序中失败,我无法访问错误(响应)状态代码。我无法弄清楚为什么在“.catch”和“axios.interceptors.response”中都没有定义响应。我遵循了这个指令,该指令演示了可以使用如下代码轻松访问“error.response”:

axios.interceptors.response.use(
  (response) => { 
    console.log(response);
    return response;
  },  
  (error) => {
    handleApiFail(error.response);
  });

如果我将此代码添加到应用程序中的“main.js”中,则在请求失败时调用“handleApiFail”,但在第二个 lambda 中未定义 error.response,并且不会调用第一个 lambda。如果请求成功,则定义第一个 lambda 中的“响应”并具有状态代码。

EDIT1这不是一个选项,因为我的OPTIONS请求不需要授权。此外,还有各种帖子描述了相同的情况。

公理

评论


答:

3赞 Simone 11/13/2018 #1

这是公理的特质。对此的快速解决方案是序列化响应:

JSON.stringify(error)

有关详细信息,请参阅此 GitHub 问题:https://github.com/axios/axios/issues/960

正如有人指出的那样,您可以检查操作中的错误状态代码,并根据它运行其他提交。

评论

0赞 Alexey Starinsky 11/13/2018
您的意思是将“error = JSON.parse(JSON.stringify(error)))”添加到第二个 lambda 中吗?
0赞 Alexey Starinsky 11/13/2018
你是说 Vuex 动作吗?它与公理有什么关系?
2赞 Simone 11/14/2018
查看 GitHub 上的讨论,看起来 axios 或 vuex(或两者兼而有之)正在处理错误响应。诀窍(正如您所指出的)是 JSON.stringify,然后 JSON.parse 错误。只要尝试一下,您应该能够看到实际的错误响应
0赞 Alexey Starinsky 11/14/2018
我在拦截器中尝试了“error = JSON.parse(JSON.stringify(error))”,但没有成功。
1赞 Simone 11/14/2018
由于我不熟悉 Vuex,恐怕我帮不上什么忙,但您也许可以在 GitHub 讨论中找到解决方案。他们将其标记为非问题并关闭了它,但人们仍然在那里发表评论。
4赞 Alexey Starinsky 11/27/2018 #2

缺乏

access-control-allow-origin: *

标头导致浏览器阻止了我的请求。

添加标头可使 axios 正常工作。

评论

5赞 Ash 8/5/2020
这是在解决问题还是导致您提出这个问题的直接问题?
1赞 Sunil Garg 5/9/2022
我正在使用相同但仍然相同的问题
6赞 Yue Dong 7/23/2020 #3

我有这样的代码:

axios.interceptors.response.use(null, (error) => {
    .........
    return Promise.reject();
});

然后,我发现我错过了在promise reject中返回我的“错误”,像这样正确:

return Promise.reject(error);
1赞 tan js 11/24/2023 #4

以下是在某些情况下可能有帮助的操作:

error = JSON.parse(JSON.stringify(error))

然后尝试阅读 或error.propertyNameserror["propertyNames"]

谢谢