2012-05-23 26 views
9

he definido un método de instancia con la mangosta para autenticar a un representante (usuario):método de instancia Mangosta es indefinido

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

En mi aplicación, creo que el representante y llamar al método authenticate 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?

+0

@JohnnyHK no estoy seguro de qué código relevante estaría omitiendo – user730569

+0

@JohnnyHK aunque instanciara un objeto nuevo mediante 'rep = nuevo Rep();' arroja el mismo error cuando llamo 'authenticate' – user730569

+0

@JohnnyHK correcto – user730569

Respuesta

14

Así que finalmente descubrí lo que estaba haciendo mal. El código fuente de mangosta aplica todos los métodos definidos dentro de schema.methods al prototipo del modelo en el punto en 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 agrega estos métodos al objeto de método de la instancia de Schema, antes de establecer el modelo a su nombre. Estaba configurando el modelo antes de definir los métodos. Problema resuelto.

Cuestiones relacionadas