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
4条答案
按热度按时间yqkkidmi1#
我认为这是一个打字错误,您在
method
后面遗漏了“s”。试试这个:此处为Mongoose文档
wnavrhmk2#
我更喜欢像mongoose文档中引用的方法那样使用它
https://mongoosejs.com/docs/api.html#schema_Schema-method
这里提到的名称是方法函数的一个参数。不像你在这里所做的,例如const schema = kittySchema = new Schema(..);
n3schb8v3#
我知道这已经得到了回答,但我有同样的问题,它通过使用
findOne()
而不是find()
修复。brgchamk4#
我在我的代码中遇到了类似的错误..后来我意识到,即使只有一个文档,我的自定义静态模式方法也会返回一个数组...下面的代码起作用了。