提问人:Alexey Starinsky 提问时间:11/13/2018 最后编辑:Alexey Starinsky 更新时间:7/23/2020 访问量:36254
如果 Axios 请求失败,则 error.response 未定义
error.response is undefined if axios request fails
问:
如果 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 中的“响应”并具有状态代码。
答:
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.propertyNames
error["propertyNames"]
谢谢
评论