我正在使用axios,express validator和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:没有匹配项Unhandled Promise 拒绝。该错误是由抛出异步内部引起的 没有捕获块或拒绝承诺 未使用.catch()处理。 (拒绝ID:3)
如果我添加了catch块,则当验证失败时,将触发catch块而不是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');
})
});
})