JS Axios - how to get response body in event of error?

梦想与她 提交于 2019-12-02 19:59:12

问题


I want to be able to get the response body back from an Axios error catch.

I am using axios v0.18.0.

My axios code looks like this:

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);
        });

My API call is returning a 400 error as I expected, given my inputs. So I am hitting the catch block. However I'm not able to retrieve the error message that's returned by the API call.

I've tried doing a console.out(error.response.data), but this returns null.

I've verified using Postman that the API call does return an error message in the response body, so the API isn't the problem.

What am I missing?


回答1:


I tested it with Mocky and the error message is indeed returned in 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);
});

The code above prints Ooops, bad request!, as returned.

EDIT: apparently the problem you described can happen for a variety of reasons. See this issue.




回答2:


Here is what I did to fix the problem.

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);
});

The main modification was to change "responseType" to "application/json".

Thanks for your help everyone.



来源:https://stackoverflow.com/questions/53620625/js-axios-how-to-get-response-body-in-event-of-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!