当前位置: 首页 > 知识库问答 >
问题:

用axios捕获错误

彭礼骞
2023-03-14

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

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

我看到ajax请求的结果有400个状态代码,响应主体看起来像{someField:[“此字段可能不是空的”]}(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个答案

龙星辰
2023-03-14

对响应使用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响应结构化的任何元素

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);
});
 类似资料:
  • 我正在使用以下代码向Laravel发布一些内容: (不相关代码省略) 当Laravel返回200时,这总体上是有效的。如果我从Laravel Axios返回401、422或其他东西,会在控制台中抛出一个错误,整个方法将停止运行。 我一直认为这是一种非常不利于开发人员的行为——我不明白吗?从后端API返回不同的状态代码应该有助于读取Vue中的响应,但Vue/Axios将每个非200响应视为致命错误。

  • 我正在从后端代码发送状态代码422,其中包含错误描述的响应正文。我使用axios post发布请求,如下所示: 问题是,当后端返回错误代码422时,我捕获的错误对象没有关于响应体的信息。有什么方法可以检索错误文本吗?

  • 嗨,我正在为后端使用Laravel API,并在React中使用Redux进行登录。嗯,我调用API,我希望laravel API传递正在发生的事情的精确错误,例如用户不存在。问题是当我想在使用axios进行的调用的catch部分访问Mesage时 Laravel登录部分 使用axios响应调用 我在网络控制台中得到的响应 xhr.js:177邮政http://127.0.0.1:8000/api

  • 我在我的反应应用程序中有一个axios请求,为此我遵循axios npm文档。 这是我的axios请求 我能够成功记录成功请求的数据。但是,当我故意产生一个错误并尝试将其记录到console.log中时,我不会将结果记录下来,我只是看到了 邮递http://localhost:3000/login 401(未经授权):3000/登录:1 错误:请求失败,状态代码401 login.js:66 在c

  • 我有一个应用程序使用了log4j1.2.17,现在我想把它更改为log4j2。所以我更改了pom.xml(我确信我已经删除了任何依赖项中的log4j1),添加了log4j2.xml。log4j2工作得很好,它记录了我想要的信息。 我查看log4j的问题。LOG4J2-2026似乎可以解决这个问题,但是我使用的log4j2版本已经是2.9.1了。我不知道是什么原因造成这个错误。

  • 问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I