Pregunta sobre express, instance, mongodb, node.js, mongoose – El método de instancia de Mongoose no está definido

9

Definí un método de instancia con Mongoose para autenticar un representante (usuario):

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

En mi aplicación, encuentro el representante y llamo alauthenticate método en él:

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

Sin embargo me sale este error:

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'

¿Qué estoy haciendo mal?

@JohnnyHK correcto user730569
@JohnnyHK incluso si crea una instancia de un objeto nuevo a través derep = new Rep(); arroja el mismo error cuando llamoauthenticate en eso user730569
@JohnnyHK no está seguro de qué código relevante estaría omitiendo user730569

Tu respuesta

1   la respuesta
16

Así que finalmente me di cuenta de lo que estaba haciendo mal. El código fuente de la mangosta aplica todos los métodos definidos dentroschema.methods al prototipo del modelo en el punto en el que el esquema del modelo se establece en el nombre del modelo (mongoose.model("modelname", modelSchema)). Por lo tanto, debe definir todos los métodos, que agregan estos métodos al objeto de método de la instancia de Esquema, antes de configurar el modelo a su nombre. Estaba configurando el modelo antes de definir los métodos. Problema resuelto.

Preguntas relacionadas