2013-01-13 16 views
5

कुछ पुराने कोड में निम्न टाइपरर फसल हो गई है।किसी मॉडल के खोज पर मोंगोस टाइप एरर एक विधि

TypeError: Object #<Object> has no method 'findOne' 

मॉडल जो हाल ही में प्रभावित हुआ था, में दो नई स्थैतिक विधियों को परिभाषित किया गया था और उन विधियों ने बाहरी मॉडल का संदर्भ दिया था। नई स्थैतिक विधियों का समर्थन करने के बाद, मैं बाहरी मॉडल के आवश्यक बयान होने के मूल कारण को निर्धारित करने में सक्षम था। पैटर्न ऐसा दिखाई देता है: कि लेखन त्रुटि की ओर जाता है:

var UserModel = require('./user'); 

var GroupSchema = new Schema({ 
    name: String, 
    users: [{ type : Schema.ObjectId, ref: 'UserModel'}], 
}); 

GroupSchema.statics.findSomeUsers = function(group, callback) { 
    this.find({name : session_user._id}, function(err, groups) { 
     UserModel.find({_id : {$in : group.users}}, function(err,patients) { 
      // do magic 
     }); 
    }); 
}; 

module.exports = mongoose.model('GroupModel', GroupSchema); 

कि GroupModel.findOne ({ 'गोगो' नाम}) कॉल आवेदन पत्र में एक कोड टुकड़ा नहीं है। जब मैं GroupSchema में UserModel के लिए आवश्यक कथन हटा देता हूं, तो ऐप कोड दोबारा काम करता है।

जावास्क्रिप्ट को लगता है कि क्यों लगता है एक() आवश्यकता आवश्यकता के अतिरिक्त के साथ एक उदाहरण विधि है?

उत्तर

14

यह node.js मुद्दा ज्ञात है। इसका मतलब है कि आपके लूपिंग को आपके कोड में कहीं और आवश्यकता है और node.js इसे रोकता है।

ऐसा करने का सही तरीका mongoose.model विधि का उपयोग कर है। तो, UserModel परिवर्तनीय के बजाय आप mongoose.model('UserModel') का उपयोग करेंगे। इसलिए, जब findSomeUsers को मोंडोज़ कहा जाएगा UserModel लाएगा और इसकी find विधि का आह्वान करेगा।

GroupSchema.statics.findSomeUsers = function(group, callback) { 
    this.find({name : session_user._id}, function(err, groups) { 
     mongoose.model('UserModel').find({_id : {$in : group.users}}, function(err,patients) { 
      // do magic 
     }); 
    }); 
}; 
+0

./user.js वह जगह है जहां UserModel परिभाषित किया गया है। वहां कोई आवश्यकता नहीं है। मैं आपके उत्तर को समझ नहीं रहा हूं - var UserModel = mongoose.model ('userModel') - विफल रहता है क्योंकि यह नहीं जानता कि स्कीमा क्या है (जिसे user.js में परिभाषित किया गया है)। – Greg

+0

आवश्यकताएं हटाएं, और userModel.findOne() को mongoose.model ('UserModel') में बदलें। FindOne() – Greg

+0

क्या आपने 'userModel' को ''/user'' में परिभाषित किया है? 'मॉड्यूल.एक्सपोर्ट्स = mongoose.model ('UserModel', UserSchema) जैसे smth;'? यदि आपके पास है, तो 'mongoose.model (' userModel ')' ठीक काम करना चाहिए। लूपिंग के लिए जरूरी है, मैं शर्मिंदा नहीं हूं कि यह आपका मामला है, लेकिन ऐसा लगता है। –

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