Я использую axios, экспресс-валидатор и bcryptjs для функции разрешения пользователю изменять свой пароль в своей учетной записи.Поле, с которым я проверяю, является тем, где пользователь должен ввести свой существующий пароль.Затем он хэширует их входные данные и проверяет их по хеш-паролю базы данных.При выполнении другой проверки я могу получить ответ на сообщение об ошибке через axios, но для этого не будет:
body("currentPass")
.custom((value, { req }) => {
return User.findOne({ _id: req.user }).then(userDoc => {
bcrypt.compare(value, userDoc.password).then(domatch => {
if (!domatch) {
return Promise.reject("no match");
}
});
});
})
Я получаю ошибку:
UnhandledPromiseRejectionWarning: нет совпаденийНеобработанное обещание отказа.Эта ошибка возникла либо из-за того, что внутри асинхронной функции не был выполнен блок catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(идентификатор отклонения: 3)
Если я добавлю блок перехвата, то, когда проверка не пройдена, сработает блок перехвата вместо Promise.reject
body("currentPass")
.custom((value, { req }) => {
return User.findOne({ _id: req.user })
.then(userDoc => {
bcrypt.compare(value, userDoc.password)
.then(domatch => {
if (!domatch) {
return Promise.reject("no match");
}
})
.catch(err => {
console.log('catch block error');
})
});
})