2012-05-23 17 views
9

I zdefiniowano metodę instancji z Mangusta uwierzytelnić rep (użytkownika):Mongoose metody instancji jest niezdefiniowany

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

W mojej aplikacji, znajdę rep i wywołać metodę authenticate od niego:

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

jednak otrzymuję ten błąd:

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' 

Co robię źle?

+0

@JohnnyHK nie wiem, co odpowiedni kod będę pomijając – user730569

+0

@JohnnyHK nawet gdybym wystąpienia świeżego obiektu poprzez 'rep = new Rep();' rzuca ten sam błąd, kiedy zadzwonić 'authenticate' na nim – user730569

+0

@JohnnyHK poprawny – user730569

Odpowiedz

14

Więc w końcu zorientowałem się, co robiłem źle. Kod źródłowy mangusty stosuje wszystkie zdefiniowane metody w zakresie schema.methods do prototypu modelu w punkcie, w którym schemat modelu jest ustawiony na nazwę modelu (mongoose.model("modelname", modelSchema)). W związku z tym należy zdefiniować wszystkie metody, które dodaje te metody do obiektu metody instancji Schema, przed ustawieniem modelu na jego nazwę. Ustalałem model przed zdefiniowaniem metod. Problem rozwiązany.