2012-05-23 24 views
9

मैं नेवला साथ एक उदाहरण विधि परिभाषित एक प्रतिनिधि (उपयोगकर्ता) प्रमाणित करने के लिए:नेवला उदाहरण विधि अपरिभाषित है

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

मेरे ऐप में, मैं प्रतिनिधि खोजने के लिए और उस पर authenticate विधि कॉल:

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

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' 

क्या मैं गलत कर रहा हूँ:

हालांकि मैं इस त्रुटि मिलती है?

+0

@JohnnyHK यकीन नहीं क्या प्रासंगिक कोड मैं – user730569

+0

@JohnnyHK को छोड़ते हुए किया जाएगा, भले ही मैं 'प्रतिनिधि = नए प्रतिनिधि() के माध्यम से एक ताजा वस्तु का दृष्टांत,' यह एक ही त्रुटि फेंकता है जब मैं 'authenticate' यह – user730569

+0

पर कॉल @JohnnyHK सही बात – user730569

उत्तर

14

तो आखिरकार मुझे पता चला कि मैं क्या गलत कर रहा था। मोंगोज़ स्रोत कोड उस बिंदु पर मॉडल के प्रोटोटाइप पर schema.methods के अंदर सभी परिभाषित विधियों को लागू करता है जिस पर मॉडल की स्कीमा मॉडल नाम (mongoose.model("modelname", modelSchema)) पर सेट की जाती है। इसलिए, आपको सभी विधियों को परिभाषित करना होगा, जो मॉडल को इसके नाम पर सेट करने से पहले, इन विधियों को स्कीमा इंस्टेंस के विधि ऑब्जेक्ट में जोड़ते हैं। मैं विधियों को परिभाषित करने से पहले मॉडल स्थापित कर रहा था। समस्या सुलझ गयी।

संबंधित मुद्दे