【问题标题】:Mongoose schema method returning is not a functionMongoose 模式方法返回不是函数
【发布时间】:2021-08-17 18:23:48
【问题描述】:
userSchema.method.comparePassword = async function(enteredPassword){
    return await bcrypt.compare(enteredPassword, this.password);
}

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

const ispasswordMatched = await User.comparePassword(password);

在这段代码中,我在控制器中调用此方法,但每次我向邮递员发出请求时,它都会返回一个错误,指出 User.comparePassword 不是函数。我已经搜索了一段时间其他人遇到这种情况,但没有什么可以解决我的问题,这让我对如何着手解决这个问题感到困惑。任何建议或提示都非常受欢迎。 快速编辑我正在使用 mongodb 4.4 版和 mongoose 5.12.5 版

【问题讨论】:

    标签: node.js mongodb mongoose schema


    【解决方案1】:

    我更喜欢像猫鼬文档中提到的方法一样使用它

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

    【讨论】:

    • 试过了,返回同样的错误,另一个快速编辑我看到有人建议我做一个备份并重新安装 mongodb。我对编程比较陌生,但你会推荐这个吗?
    • 也这样做,确保您也使用最新版本的猫鼬。并检查比。只是确认这两种方法都在同一个 js 文件中,对吗?
    • 重新安装 mongodb 就可以了。仍然不确定是什么导致了问题。
    【解决方案2】:

    我认为这是一个错字,您在method 之后缺少“s”。试试这个:

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

    猫鼬文档here

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2019-02-11
      • 2021-03-30
      • 2017-08-28
      • 1970-01-01
      • 2013-06-30
      相关资源
      最近更新 更多