返回的猫鼬模式方法不是函数

时间:2021-05-30 01:19:58

标签: node.js mongodb mongoose schema

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 版

2 个答案:

答案 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();