Перехват сообщений об ошибках из приложения NodeJS express с помощью axios - PullRequest
1 голос
/ 03 апреля 2020

У меня есть приложение, использующее NodeJS в бэкэнде и, в частности, Express framework для обслуживания маршрутов 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 ]

2 голосов
/ 03 апреля 2020

err.response будет иметь объект { error: 'Error Message' }, поэтому вы можете получить к нему доступ, используя err.response.error. также убедитесь, что err.response.error существует, потому что, если он не существует, и вы пытаетесь получить к нему доступ, вы получите ошибку в улове, говорящую err.response.error is undefined

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)}`);
  });
2 голосов
/ 03 апреля 2020

За этот комментарий , попробуйте получить доступ к err.response в блоке catch.

...