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

使用axios post捕获错误体

上官鸿朗
2023-03-14

我正在从后端代码发送状态代码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时,我捕获的错误对象没有关于响应体的信息。有什么方法可以检索错误文本吗?

共有3个答案

查飞星
2023-03-14

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

try {
    const response = await axios.post(url, body)
} catch (error) {
    console.log(error.response.data);
}
卫俊力
2023-03-14

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

如果你想了解这个问题的全部细节,你可以看到这篇博文:如何捕捉AXIOS中的错误主体。

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

>

axios.get('wrongSetup')
.then((response) => {})
.catch((error) => {
    console.log(error.message);
})

错误的网络请求:当我们试图访问的服务器根本没有响应时,就会发生这种情况。这可能是由于服务器关闭或URL错误。在这种情况下,我们可以使用错误来访问请求的信息。请求。

axios.get('network error')
.then((response) => {})
.catch((error) => {
    console.log(error.request );
});

错误状态:这是最常见的请求。任何返回的状态不同于200的请求都可能发生这种情况。它可以是未经授权、未被发现、内部错误等。当发生此错误时,我们可以通过访问下面代码段中指定的参数来掌握请求的信息。对于数据(如上所述),我们需要访问错误。回答数据

axios.get('errorStatus')
.then((response) => {})
.catch((error) => { 
     console.log(error.response.data);  
     console.log(error.response.status);  
     console.log(error.response.headers); 
 })
太叔天宇
2023-03-14

我有同样的问题和答案(根据Axios

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

请参阅此处了解更多详细信息。

 类似资料:
  • 我无法用axios捕捉错误响应。怎么做?我用的是: 我看到ajax请求的结果有400个状态代码,响应主体看起来像(Django后端)。没关系,我已经准备好在catch处理程序中处理这些错误了。 但是它们转到成功处理程序。为何如此?我在控制台中看到以下输出: 成功处理程序接收axios错误对象作为结果。为什么会这样,下一步该怎么办?此错误对象不包含任何有用信息。 UPD。实际上,错误对象包含有用的信

  • 我试图捕捉错误60并继续执行脚本,下面是我目前正在做的事情: 它返回这个: 回溯(最后一次调用):文件“debug.py”,第13行,在urlopen return\u opener中的soup=BeautifulSoup(urlib2.urlopen(url,timeout=10))文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/

  • 是否可以使用promises的ES6语法捕获异步错误?例如,以下操作不起作用(.catch未捕获错误): 但是这个同步版本有: 使用try/catch块和清除catch中的错误是执行以下操作的唯一解决方案吗? 对于这个问题,假设抛出错误的代码部分位于另一个命名函数中,因此它没有访问函数的权限。 谢谢 编辑:这里有一个更完整的示例,说明我想在JSFIDLE中做什么。

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

  • 为什么我在尝试运行时,在Laravel 5.1中遇到了PHP可捕获的致命错误? 可捕获的致命错误:传递给Illumate\Routing\UrlGenerator::__construct()的参数2必须是Illumate\Http\Request的实例,空给定,在第62行和第62行的C:\xampp\htdocs\kincert2\本地\供应商\laravel\框架\src\Illumate\R

  • 问题内容: 我试图确保用户输入是整数,但是当我使用下面的代码时,我只会得到语句的无限循环。关于如何改进的任何建议? 问题答案: 不会消耗无效的输入,因此它将反复尝试读取相同的无效值。要解决此问题,您需要通过调用或接受任何值来显式使用它。 顺便说一句,为使您的代码更整洁并避免昂贵的操作(如创建异常),您应使用。 这是组织代码的方法