mongodb 返回的Mongoose架构方法不是函数

a2mppw5e  于 2022-12-12  发布在  Go
关注(0)|答案(4)|浏览(128)
userSchema.method.comparePassword = async function(enteredPassword){
    return await bcrypt.compare(enteredPassword, this.password);
}

因此,在上面的代码中,我在我的用户数据库中有一个mongoose User模式方法,用于在每次用户尝试登录时比较存储在我的数据库中的加密密码。

const ispasswordMatched = await User.comparePassword(password);

在这段代码中,我在控制器中调用了这个方法,但每次我向postman发出请求时,它返回一个错误,说User.comparePassword不是一个函数。我已经搜索了一段时间关于其他人遇到这个问题,但没有什么能解决我的问题,它让我困惑于如何继续解决这个问题。任何建议或提示是非常感谢。快速编辑我正在使用mongodb版本4。4与 Mongoose 版本5.12.5

yqkkidmi

yqkkidmi1#

我认为这是一个打字错误,您在method后面遗漏了“s”。试试这个:

userSchema.methods.comparePassword = async function(enteredPassword){
    return await bcrypt.compare(enteredPassword, this.password);
}

此处为Mongoose文档

wnavrhmk

wnavrhmk2#

我更喜欢像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();
n3schb8v

n3schb8v3#

我知道这已经得到了回答,但我有同样的问题,它通过使用findOne()而不是find()修复。

brgchamk

brgchamk4#

我在我的代码中遇到了类似的错误..后来我意识到,即使只有一个文档,我的自定义静态模式方法也会返回一个数组...下面的代码起作用了。

const user = await User.findByName("Meghna")
//user.sayHi() -> this one was failing with not a function error
user[0].sayHi() 
console.log(user)

相关问题