2012-05-23 15 views
9

ho definito un metodo di istanza con Mongoose per autenticare un rappresentante (utente):metodo di istanza Mongoose è indefinito

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

Nella mia app, ho trovato il rappresentante e chiamare il metodo authenticate su di esso:

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

Tuttavia ottengo questo errore:

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' 

che cosa sto facendo di sbagliato?

+0

@JohnnyHK non so quale codice rilevante vorrei omettere – user730569

+0

@JohnnyHK anche se istanzio un nuovo oggetto tramite 'rep = new Rep();' genera lo stesso errore quando chiamo 'authenticate' su di esso – user730569

+0

@JohnnyHK corretta – user730569

risposta

14

Così ho finalmente capito cosa stavo facendo male. Il codice sorgente mangusta applica tutti i metodi definiti all'interno di schema.methods al prototipo del modello nel punto in cui lo schema del modello è impostato sul nome del modello (mongoose.model("modelname", modelSchema)). Pertanto, è necessario definire tutti i metodi, che aggiunge questi metodi all'oggetto metodo dell'istanza Schema, prima di impostare il modello sul relativo nome. Stavo impostando il modello prima di definire i metodi. Problema risolto.

Problemi correlati