使用axios post捕捉错误的身体

时间:2017-07-10 17:00:51

标签: javascript post axios

我从后端代码发送状态代码422,其响应正文包含错误的描述。我正在使用axios post发布请求:

post: function(url, reqBody) {
    const request = axios({
        baseURL: config.apiUrl,
        url: url,
        headers: {
            'Content-Type': 'application/json',
            'Authorization': sessionStorage.getItem('token')
        },
        method: 'POST',
        data: reqBody,
        responseType: 'json'
    });
    return request
        .then((res) => {
            return res;
        })
        .catch((error) => {
            console.log(error);
            return error;
        })
}

问题是当后端返回错误代码422时,我捕获的错误对象没有关于响应主体的信息。有什么方法可以检索错误文本吗?

5 个答案:

答案 0 :(得分:7)

对于本机反应,它对我有用

api.METHOD('endPonit', body)
  .then(response => {
   //...
  })
  .catch (error => {
    const errorMessage = JSON.parse(error.request.response)
    console.log(errorMessage.message)
  })

答案 1 :(得分:4)

我有同样的问题,答案(根据Axios> = 0.13)是专门检查error.response.data

axios({
    ...
}).then((response) => {
    ....
}).catch((error) => {
    if( error.response ){
        console.log(error.response.data); // => the response payload 
    }
});

有关详细信息,请参阅here

答案 2 :(得分:4)

AXIOS错误响应的“主体”取决于请求所具有的响应类型。

如果您想了解有关此问题的完整详细信息,请参阅以下博客文章:How to catch the body of an error in AXIOS

总而言之,AXIOS将根据错误返回3个不同的主体:

  1. 错误的请求,我们实际上在请求中做错了什么(缺少参数,格式错误),但实际上并未发送。发生这种情况时,我们可以使用error.message访问信息。

    axios.get('wrongSetup')
    .then((response) => {})
    .catch((error) => {
        console.log(error.message);
    })
    
  2. 网络请求错误:当我们尝试访问的服务器根本没有响应时,就会发生这种情况。这可能是由于服务器关闭或URL错误。 在这种情况下,我们可以使用error.request访问请求的信息。

    axios.get('network error')
    .then((response) => {})
    .catch((error) => {
        console.log(error.request );
    });
    
  3. 错误状态:这是最常见的请求。对于任何返回状态不同于200的请求,都可能发生这种情况。它可能是未经授权的,未找到的,内部错误等。发生此错误时,我们可以通过访问以下代码段中指定的参数来掌握请求的信息。对于数据(如上所述),我们需要访问error.response.data

    axios.get('errorStatus')
    .then((response) => {})
    .catch((error) => { 
         console.log(error.response.data);  
         console.log(error.response.status);  
         console.log(error.response.headers); 
     })
    

答案 3 :(得分:1)

对于使用await / async和Typescript的用户

try {
    const response = await axios.post(url, body)
} catch (error) {
    console.log(error.response.data);
}

答案 4 :(得分:0)

我从后端返回一个字符串,但期望json作为响应类型。所以我需要为axios返回一个对象而不是字符串来正确处理它。