Я использую реакцию и экспресс. В приложении «Реакция» я хочу использовать axios.post для отправки учетных данных пользователя на сервер Express и, надеюсь, получить от него ответ. Из ответа я хочу извлечь сообщение и статус. Это выглядит так:
handleSubmit = e => {
e.preventDefault();
const { email, password } = this.state;
axios
.post("/api/users/login", {
email,
password
})
.then(res => console.log(res.data.msg, res.status))
.catch(err => console.log(err));
};
В бэкэнде я использую модель Мангуста, чтобы узнать, существует ли пользователь в базе данных.
router.post("/login", (req, res) => {
const { email, password } = req.body;
User.findOne({ email })
.then(user => {
if (!user) return res.status(400).json({ msg: "No such user in the DB" });
bcrypt.compare(password, user.password).then(isMatch => {
if (!isMatch) {
return res.status(400).json({ msg: "Wrong password" });
}
req.session.userId = user.id;
res.status(200).json({ msg: "You have logged in" });
});
})
.catch(err => console.log("Error in catch in findOne"));
});
Если все идет хорошо, и в базе данных есть пользователь с этими учетными данными, я получаю, как и ожидалось, сообщение «Вы вошли в систему» и состояние 200 в консоли
НО
Если возникает ошибка, я не получаю в пользовательском сообщении об ошибке Axios, например «Нет такого пользователя в БД» или «Неверный пароль», вместо этого я получаю ошибку по умолчанию, я думаю, это выглядит так:
xhr.js:166 POST http://localhost:3000/api/users/login 400 (Bad Request)
Login.js:21 Error: Request failed with status code 400
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:60)
Мой вопрос: как я могу получить свои собственные сообщения об ошибках вместо сообщений по умолчанию, если что-то пойдет не так? Например: если пароль неверный, я хочу получить это сообщение в ответе axios «Нет такого пользователя в БД».