Функция успеха отлично работает, когда дело доходит до получения данных с внутреннего сервера express и манипулирования ими. Я не могу правильно обработать ошибку, выданную бэкэндом. Можно получить код состояния (400 или другой) и соответствующий текст (неверный запрос и т. Д. c), но не фактическое сообщение, которое отправляет серверная часть express.
Код входа в систему внутреннего интерфейса
router.post("/users/login", async (req, res) => {
try {
const user = await User.findByCredentails(
req.body.email,
req.body.password
);
const token = await user.generateAuthToken();
res.send({ user, token });
} catch (error) {
res.status(400).json({ error: error.message }); //error.message is thrown by the database (which logs perfectly fine in the backend when some error occurs)
}
});
Код базы данных, который отправляет сообщение (в этом нет ошибки; поместите это здесь только для справки)
userSchema.statics.findByCredentails = async (email, password) => {
const user = await User.findOne({ email });
if (!user) throw new Error("Unable to find a user with the entered email");
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) throw new Error("Incorrect password, try again");
return user;
};
Код интерфейса (работает нормально для успеха, но не для ошибки)
function login() {
const data = {
email: $("#email-field").val(),
password: $("#password-field").val()
};
$.ajax({
url: "/users/login",
method: "POST",
data,
success: function(userData) {
console.log(userData); //works just fine
},
error: function(jqXHR) {
//how can I get that error message here. I'm able to get jqXHR.status and .textStatus but not the actual message that I want.
}
});
}