В моем ответе есть форма, которая позволяет пользователям заполнять свою информацию, а затем отправляет запросы 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() });
, но это не помогает, и результаты совпадают.