使用axios捕获NodeJS express应用程序的错误消息

3

我有一个使用NodeJS后端和专门的Express框架来提供API路由的应用程序。我的客户端使用ReactJS编写,利用axios来发出API请求。

第一次使用axios包,我无法找到如何从响应中访问错误消息。

我的API返回错误响应:

res.status(404).send({ error: 'Error Message' });

axios 中,我有以下内容:

axios.post('/api/users', newUser)
  .then((user) => {
    console.log(`User created: ${JSON.stringify(user)}`);
  }).catch((err) => {
    console.log(`Error : ${JSON.stringify(err)}`);
  });

console.log(`Error : ${JSON.stringify(err)}`) 的输出结果为:

{
  "message": "Request failed with status code 404",
  "name": "Error",
  "stack": "Error: Request failed with status code 404\n    at createError (http://localhost:3000/static/js/0.chunk.js:13853:15)\n    at settle (http://localhost:3000/static/js/0.chunk.js:14074:12)\n    at XMLHttpRequest.handleLoad (http://localhost:3000/static/js/0.chunk.js:13328:7)",
  "config": {
    "url": "/api/users",
    "method": "post",
    "data": "someData",
    "headers": {
      "Accept": "application/json, text/plain, */*",
      "Authorization": "Bearer xxxxx",
      "Content-Type": "application/json;charset=utf-8"
    },
    "transformRequest": [
      null
    ],
    "transformResponse": [
      null
    ],
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1
  }
}

我找不到err对象中来自服务器的响应消息,我甚至尝试过:

res.status(404).json({ error: 'Error Message' });

没有成功。

2个回答

6
根据这篇评论,请在catch模块中尝试访问err.response

2
谢谢,可以在err.response.data中找到。Express JS发送的所有响应都位于数据对象中。 - Konstantinos Lamogiannis
1
很高兴能够帮助! - Aaron

1

err.response会有一个对象{ error: '错误信息' },因此您可以使用err.response.error来访问它。还要确保err.response.error存在,因为如果不存在并且您尝试访问它,将在catch中抛出一个错误,指示err.response.error未定义

axios.post('/api/users', newUser)
  .then((user) => {
    console.log(`User created: ${JSON.stringify(user)}`);
  }).catch((err) => {
   if(err.response.error)
    console.log(`Error : ${JSON.stringify(err.response.error)}`);
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接