userSchema.method.comparePassword = async function(enteredPassword){
return await bcrypt.compare(enteredPassword, this.password);
}
因此,在上面的代码中,我的用户数据库中有一个 mongoose User 架构方法,用于在用户每次尝试登录时比较存储在我的数据库中的加密密码。
const ispasswordMatched = await User.comparePassword(password);
在这段代码中,我在控制器中调用此方法,但每次我向邮递员发出请求时,它都会返回一个错误,指出 User.comparePassword 不是函数。我已经搜索了一段时间有关其他人遇到此问题的信息,但没有什么可以解决我的问题,这让我对如何继续解决此问题感到困惑。任何建议或提示都非常昂贵。 快速编辑我使用的是 mongodb 4.4 版和 mongoose 5.12.5 版
答案 0 :(得分:1)
我认为这是一个错字,您在 method
之后缺少了“s”。试试这个:
userSchema.methods.comparePassword = async function(enteredPassword){
return await bcrypt.compare(enteredPassword, this.password);
}
猫鼬文档here
答案 1 :(得分:0)
我更喜欢像 mongoose 文档中提到的方法一样使用它
https://mongoosejs.com/docs/api.html#schema_Schema-method
提到名称是方法函数的参数。不像你在这里所做的那样 例如。 const schema = kittySchema = new Schema(..);
schema.method('meow', function () {
console.log('meeeeeoooooooooooow');
})
const Kitty = mongoose.model('Kitty', schema);
const fizz = new Kitty;
fizz.meow();