使用axios post捕获错误正文

Amo*_*wal 7 javascript post axios

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

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;
        })
}
Run Code Online (Sandbox Code Playgroud)

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

小智 17

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

如果您想了解有关此问题的完整详细信息,可以查看此博文:如何捕获 AXIOS 中的错误正文

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

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

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

    axios.get('network error')
    .then((response) => {})
    .catch((error) => {
        console.log(error.request );
    });
    
    Run Code Online (Sandbox Code Playgroud)
  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); 
     })
    
    Run Code Online (Sandbox Code Playgroud)

  • “任何返回状态不同于 200 的请求都可能发生这种情况。”我会说除了 2XX/3XX 之外。 (2认同)

Joe*_*dee 11

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

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

有关更多详细信息,请参见此处


Yay*_*ano 10

对于那些使用 await/async 和 Typescript 的人

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


小智 8

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

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


Amo*_*wal 0

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