【发布时间】:2019-09-21 05:44:09
【问题描述】:
我正在使用 bcrypt 3.0.6。我的Model 文件中有以下代码:
User.prototype.validPassword = async function(password) {
try{
// original code:
// return await bcrypt.compare(password, this.password);
const match = await bcrypt.compare(password, this.password);
console.log(match);
} catch(error) {
console.log(error);
return false;
}
};
我从我的控制器调用它:
try {
if (!req.body.userName || !req.body.password) throw "Invalid Login"
user = await User.findOne({
where: { userName: req.body.userName }
})
if (!user) throw "Invalid login"
const match = user.validPassword(req.body.password);
// const match = await bcrypt.compare(req.body.password, user.password);
if (!match) throw "Invalid login";
// build token
...
});
} catch(error) {
res.status(500).json({
"msg": "Server Error",
"error": error,
})
}
当我调试它时,match 是undefined。
如果我在控制器中进行比较,它会按预期工作。我宁愿比较在模型文件中。我在这里做错了什么?
我是 async/await 代码的新手,但我已经成功地使用它在同一个项目中实现了几个其他控制器方法。
【问题讨论】:
-
尽管将其命名为
returnValue... -
@jonrsharpe 该评论显示了我的原始结构。添加了返回值,因此我可以在其中设置一个断点并查看 bcrypt 比较方法返回的值。
-
你有没有试过在函数调用前加上
await?
标签: node.js express async-await sequelize.js