Как увидеть ответ об ошибке Axios JSON в React - PullRequest
0 голосов
/ 26 марта 2019

В моем ответе есть форма, которая позволяет пользователям заполнять свою информацию, а затем отправляет запросы Post на создание нового пользователя в моей базе данных после отправки. Я использую Axios, чтобы сделать http-вызов с бэкэндом узла. Запрос на отправку работает в бэкэнде, но сейчас я пытаюсь обработать ошибки во внешнем интерфейсе (т. Е. Если пользователь вводит недопустимое электронное письмо, бэкэнд перехватывает его и отправляет статус ошибки обратно, и я хочу отобразить сообщение для пользователь говорит, что ему нужно ввести действующий адрес электронной почты и т. д.).

У меня на сервере есть следующий код для обработки запроса:

const { check, validationResult } = require('express-validator/check');

studentRoutes.route('/add').post([
  check('email').isEmail(), check('class_year').isInt({min: 2014, max: 2022})],
  function (req, res) {

  //make sure input is valid
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }
  .
  .
  .
  //post call succesful
  res.status(200).send("Student successfully Added to database");
});

На внешнем интерфейсе я выполняю http-вызов следующим образом:

app.post('student/add', obj)
    .then(res => console.log(res.data))
    .catch(err => console.log(err));

где приложение - это axios.

Когда я пытаюсь сделать это с правильными данными (т.е. не должен возвращать ошибку), сообщение «Студент успешно добавлен в базу данных» выводится на консоль, как и ожидалось.

Когда я пытаюсь сделать это с плохим адресом электронной почты (т.е. должен возвращать ошибку), все, что выводится на мою консоль, это:

(X) POST http://localhost:4000/student/add 422 (Unprocessable Entity)
Error: Request failed with status code 422
    at createError (createError.js:17)
    at settle (settle.js:19)
    at XMLHttpRequest.handleLoad (xhr.js:78)

Где первая ошибка POST обнаруживается моим браузером, а вторая часть, начинающаяся с «Error: ...», выводится на консоль.

Когда я пытаюсь получить доступ к ошибке (err.errors или аналогичной), она возвращает неопределенное значение. Как я могу получить доступ к коду статуса и телу отправленной ошибки?

Примечание. Я также пытался заменить строку return res.status(422).json({ errors: errors.array() }); на return res.status(422).send({ errors: errors.array() });, но это не помогает, и результаты совпадают.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Вы должны иметь доступ к этому:

catch (err) { 
  console.error(err.response.data.errors);
}
0 голосов
/ 26 марта 2019

Попробуйте:

error.message

Или, в зависимости от конфигурации бэкэнда:

error.response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...