Pergunta sobre express, instance, mongoose, node.js, mongodb – O método da instância do Mongoose é indefinido

9

Eu defini um método de instância com o Mongoose para autenticar um representante (usuário):

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

No meu aplicativo, eu encontro o representante e chamo oauthenticate método sobre ele:

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', {});
  }
});

No entanto, recebo este erro:

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'

O que estou fazendo de errado?

@JohnnyHK correto user730569
@ JohnnyHK mesmo se eu instanciar um novo objeto viarep = new Rep(); ele lança o mesmo erro quando eu ligoauthenticate nele user730569
@JohnnyHK não sabe qual código relevante eu estaria omitindo user730569

Sua resposta

1   a resposta
16

fonte do mangusto aplica todos os métodos definidos dentroschema.methods para o protótipo do modelo no ponto em que o esquema do modelo é definido para o nome do modelo (mongoose.model("modelname", modelSchema)). Portanto, você deve definir todos os métodos, que adicionam esses métodos ao objeto de método da instância Schema, antes de definir o modelo como seu nome. Eu estava configurando o modelo antes de definir os métodos. Problema resolvido.

Perguntas relacionadas