使用axios捕获错误

时间:2017-10-13 00:11:13

标签: ajax axios

我无法用axios捕获错误响应。怎么做? 我用的是:

axios
  .post(...)
  .then(response => {
    console.log('Success: ', response)
  }).catch(error => {
    console.log('Error: ', error)
  })

我看到ajax请求的结果有400个状态代码,响应正文看起来像{someField:["This field may not be blank"]}(Django后端)。没关系,我已准备好在catch处理程序中处理这些错误。

但他们转而去成功处理程序。为什么这样?我在控制台中看到以下输出:

Success: Error: Request failed with status code 400
at createError (createError.js:16)
at settle (settle.js:18)
at XMLHttpRequest.handleLoad (xhr.js:77)

成功处理程序接收axios错误对象作为结果。为什么会这样,接下来该怎么做?此错误对象不包含任何有用的信息。

UPD。实际上,错误对象确实包含有用的信息,它包含里面的响应对象。所以我们可以使用:

axios
  .post(...)
  .then(response => {
    if (response && response.response) {
      console.log('This is also an error', response.response.status)
    } else {
      console.log('Success: ', response)
    }
  }).catch(error => {
    console.log('Error: ', error)
  })

但这看起来非常难看。

axios版本是axios@0.16.2。

这是一个大项目,但我找不到任何axios定制。

1 个答案:

答案 0 :(得分:2)

使用Axios拦截器进行响应。检查要强制失败的状态为错误,以便在收到所述状态代码时通过catch路径。

axios.interceptors.response.use(function (response) {
    if (response.status === 400) {
        return Promise.reject(response);
    }
    return response;
}, function (error) {
    // Do something with response error
    return Promise.reject(error);
});

如果您没有收到预期的状态代码,则可能会更改检查拦截器中响应的方式。您可以检查Axios response is structured

中的任何元素
axios.interceptors.response.use(function (response) {
    if (response.statusText !== 'OK') {
        return Promise.reject(response);
    }
    return response;
}, function (error) {
    // Do something with response error
    return Promise.reject(error);
});
相关问题