Mongoose实例方法未定义

时间:2012-05-23 17:21:29

标签: node.js mongodb express instance mongoose

我使用Mongoose定义了一个实例方法来验证rep(用户):

RepSchema.methods.authenticate = function(password){
  return this.encryptPassword(password) === this.hashed_password;
};

在我的应用中,我找到了代表并在其上调用authenticate方法:

var mongoose = require("mongoose");
var Rep = mongoose.model("Rep");

Rep.findOne({email: email}, function(err, rep){
  if (rep.authenticate(req.body.session.password)){
    req.session.rep_id = rep._id;
    res.redirect('/calls', {});
  }
});

但是我收到了这个错误:

TypeError: Object { email: 'meltzerj@wharton.upenn.edu',
  password: XXXXXXXXX,
  name: 'meltz',
  _id: 4fbc6fcb2777fa0272000003,
  created_at: Wed, 23 May 2012 05:04:11 GMT,
  confirmed: false,
  company_head: false } has no method 'authenticate'

我做错了什么?

1 个答案:

答案 0 :(得分:16)

所以我终于弄清楚我做错了什么。 mongoose源代码将schema.methods内的所有已定义方法应用于模型原型,模型的模式设置为模型名称(mongoose.model("modelname", modelSchema))。因此,在将模型设置为其名称之前,必须定义所有方法,这些方法将这些方法添加到Schema实例的方法对象中。我在定义方法之前设置了模型。问题解决了。