JS Axios - 如何在发生错误时获取响应正文?
Posted
技术标签:
【中文标题】JS Axios - 如何在发生错误时获取响应正文?【英文标题】:JS Axios - how to get response body in event of error? 【发布时间】:2019-05-06 07:59:55 【问题描述】:我希望能够从 Axios 错误捕获中获取响应正文。
我正在使用 axios v0.18.0。
我的 axios 代码如下所示:
let service = axios.create(
baseURL: "https://baseUrl.azurewebsites.net",
responseType: "json"
);
service.defaults.headers.common['authorization'] = `Bearer $token`;
service.post("/api/method", params).then(result =>
console.log('success',result);
).catch(error=>
console.log('error');
console.log(error);
);
根据我的输入,我的 API 调用返回 400 错误,正如我所料。所以我正在击中catch块。但是我无法检索 API 调用返回的错误消息。
我尝试过执行 console.out(error.response.data),但这返回 null。
我已使用 Postman 验证 API 调用确实在响应正文中返回错误消息,因此 API 不是问题。
我错过了什么?
【问题讨论】:
【参考方案1】:我用Mocky测试过,确实在error.response.data
中返回了错误信息。
const axios = require('axios');
// http://www.mocky.io/v2/5c06f6be3000009600d25953 (the mock api to call, it always returns 400 with an error message)
let service = axios.create(
baseURL: "http://www.mocky.io",
responseType: "json"
);
service.post("/v2/5c06f6be3000009600d25953").then(result =>
console.log('success', result);
).catch(error =>
console.log(error.response.data);
);
上面的代码打印Ooops, bad request!
,作为返回。
编辑:显然,您描述的问题可能由于多种原因而发生。请参阅this 问题。
【讨论】:
感谢您的来信。我运行了您的代码,但没有看到“糟糕,请求错误!”被退回;我得到“空”。我还阅读了您引用的链接。 jacurtis (github.com/axios/axios/issues/960#issuecomment-398269712) 评论说必须查看 error.response.data 或 error.response.data.data,但这些都是非空的。 奇怪...我做了一个Codepen 并且发生了同样的问题。但如果我使用 Node 在本地运行,它就可以工作。 修改我之前的评论...我的意思是error.response.data和error.response.data.data 都是空的。所以似乎没有一种直接的方法来获取错误响应。 Axios 自动读取正文 400 但不是 500,我正在寻找一种配置方法...【参考方案2】:这是我解决问题的方法。
let options =
baseURL: "http://www.mocky.io",
responseType: "application/json"
;
//service.post("/v2/5c06f6be3000009600d25953",).then(result =>
axios.post("/v2/5c06f6be3000009600d25953",null,options).then(result =>
console.log('success', result);
).catch(error =>
console.log(error.response);
);
主要的修改是将“responseType”改为“application/json”。
感谢大家的帮助。
【讨论】:
以上是关于JS Axios - 如何在发生错误时获取响应正文?的主要内容,如果未能解决你的问题,请参考以下文章
在 axios catch 子句中访问 HTTP 错误正文数据 [重复]
Spring Boot:发生 RESTFul 错误(404、403、500)时获取 JSON 正文
在错误情况下从 WebClient 获取响应正文的正确方法是啥?