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 获取响应正文的正确方法是啥?

如何在反应中正确获得axios响应?

Vue.js - 如何通过 axios 响应数据从对象中获取特定字段

Retrofit 2.0 - 如何获取 400 Bad Request 错误的响应正文?