2

在调用我正在处理的项目中附加到模式的方法时,我遇到了一些困惑。我实际上是在访问数据库中的文档,并尝试将我存储的散列密码与用户在登录时提交的密码进行比较。但是,当我尝试比较密码时,找不到我附加到模式的方法对象的方法。它甚至不会给我一个错误,告诉我没有这样的方法。这是我在架构上设置方法的地方:

var Schema = mongoose.Schema;

var vendorSchema = new Schema({
  //Schema properties
});

vendorSchema.pre('save', utils.hashPassword);
vendorSchema.methods.verifyPassword = utils.verifyPassword;

module.exports = mongoose.model('Vendor', vendorSchema);

我用作比较方法的函数是我创建的名为 verifyPassword 的实用程序函数,它保存在实用程序文件中。该函数的代码在这里:

verifyPassword: function (submittedPassword) {
    var savedPassword = this.password;

    return bcrypt.compareAsync(submittedPassword, savedPassword);
  }

我尝试像这样验证密码:

    var password = req.body.password;
    _findVendor(query)
        .then(function (vendor) {

          return vendor.verifyPassword(password);
        });

如果这有什么不同的话,我已经用蓝鸟承诺向猫鼬许诺了。我已经尝试了很多东西,但是当我尝试调用这个我认为我已经附加了架构的方法时,为什么什么也没发生,我找不到任何答案。任何帮助将不胜感激。

4

1 回答 1

3
/*VendorSchema.js*/
var Schema = mongoose.Schema;
var vendorSchema = new Schema({
  //Schema properties
});
vendorSchema.methods.method1= function{
         //Some function definition
};
vendorSchema.statics.method2 = function{
         //Some function definition
};
module.exports = mongoose.model('Vendor', vendorSchema);

假设我想访问其他文件中的 VendorSchema:

/*anotherfile.js*/
var VendorSchema= require('../VendorSchema.js');
var Vendor = new VendorSchema();

由于我们将 method2 定义为静态,您可以使用 schemareference 对象 VendorSchema 访问 anotherfile.js 中的 method2。

VendorSchema.method2

但是 method1 不是静态的,您只能在创建模式的对象实例后使用 anotherfile.js 中的 method1 访问。

Vendor.method1 /*Vendor is object instance of the schema*/
于 2016-02-02T09:56:00.827 回答