Вопрос по node.js, mongodb, mongoose, express – Метод экземпляра Mongoose не определен

9

Я определил метод экземпляра с Mongoose для аутентификации представителя (пользователя):

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: '[email protected]',
  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'

Что я делаю неправильно?

@JohnnyHK не уверен, какой соответствующий код я бы пропустил user730569
@JohnnyHK правильно user730569
@JohnnyHK, даже если я создаю свежий объект черезrep = new Rep(); выдает ту же ошибку, когда я звонюauthenticate в теме user730569

Ваш Ответ

1   ответ
16

Так что я наконец понял, что я делаю не так. Исходный код mongoose применяет все определенные методы внутриschema.methods прототипу модели в точке, в которой для схемы модели задано имя модели (mongoose.model("modelname", modelSchema)). Следовательно, вы должны определить все методы, которые добавляют эти методы к объекту метода экземпляра Schema, прежде чем устанавливать для модели его имя. Я устанавливал модель, прежде чем определять методы. Задача решена.

Похожие вопросы