爱可信。即使在api返回404错误时,如何获得错误响应,最后在try catch中

时间:2018-01-17 10:30:12

标签: javascript error-handling axios

例如。

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    console.error(err);
  } finally {
    console.log(apiRes);
  }
})();
<{1>}中的

finally将返回null。

即使api得到404响应,我仍然希望在响应中使用有用的信息。

当axios抛出错误时,如何在apiRes中使用错误响应。

https://jsfiddle.net/jacobgoh101/fdvnsg6u/1/

2 个答案:

答案 0 :(得分:5)

根据the documentation,完整回复可用作错误的response属性。

所以我会在catch块中使用该信息:

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    console.error("Error response:");
    console.error(err.response.data);    // ***
    console.error(err.response.status);  // ***
    console.error(err.response.headers); // ***
  } finally {
    console.log(apiRes);
  }
})();

Updated Fiddle

但如果您想在finally中使用它,只需将其保存到您可以在那里使用的变量中:

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    apiRes = err.response;
  } finally {
    console.log(apiRes); // Could be success or error
  }
})();

答案 1 :(得分:2)

根据AXIOS文档(此处为https://github.com/axios/axios),您可以将config对象中的validateStatus: false传递给任何axios请求。

例如

axios.get(url, { validateStatus: false })
axios.post(url, postBody, { validateStatus: false })

您还可以传递如下函数:validateStatus: (status) => status === 200 根据文档,默认行为是如果(200 <= status <300)返回true的函数。