2013-08-14 10 views
6

का उपयोग करते समय त्रुटि 'ऑब्जेक्ट में कोई विधि xxx नहीं है' मैं मोंगो डीबी को नोडज के साथ जोड़ने के लिए मोंगोस का उपयोग करने की कोशिश कर रहा हूं।मोंगोस

मेरे पास नीचे मेरा कोड है। जब मैं API/उपयोगकर्ताओं के माध्यम से एक प्राप्त/पोस्ट करने के लिए कोशिश कर रहा हूँ मैं

त्रुटि


TypeError: Object function model(doc, fields, skipId) { 
[08/14 21:28:06 GMT+0800]  if (!(this instanceof model)) 
[08/14 21:28:06 GMT+0800]  return new model(doc, fields, skipId); 
[08/14 21:28:06 GMT+0800]  Model.call(this, doc, fields, skipId); 
[08/14 21:28:06 GMT+0800] } has no method 'list' 

किसी मैं गलत क्या कर रहा हूँ के बारे में समझाएं कर सकते हैं मिल सकता है? मैं क्योंकि मैं कार्यों का एक बहुत कुछ है विभिन्न फाइलों में मेरी कोड को विभाजित करने के लिए किया था और मैं गड़बड़ उन्हें या तो मेरी app.js या सूचकांक/routes.js

app.js

//database connection 
mongoose.connect('....'); 
var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function callback() { 
console.log("Conncection Success !"); 
}); 

users_module= require('./custom_modules/users.js'); 

users_module.init_users(); 
... 
    app.get('/api/users',user.list); // routing code from expressjs 

करना चाहते हैं न /custom_modules/users.js

function init_users() { 

    userSchema = mongoose.Schema({ 
     //id: Number, 
     usernamename: String, 
     hash: String, 
     ... 

    }); 

    userSchema.methods.list = list; 

    UserModel = mongoose.model('User', userSchema); 

} 

function list() { 
    return UserModel.find(function (err, users) { 
     if (!err) { 
      return users; 
     } else { 
      return console.log(err); 

     } 
    }); 
}); 

exports.init_users = init_users; 

मार्गों/user.js

exports.list = function (req, res){ 

    var users = UserModel.list(); // <---------- This is the error Line 
    return res.send(users); 

} 
+0

जो लाइन पर आप उस त्रुटि देखा? – zsong

+0

मैंने प्रश्न पर त्रुटि को अद्यतन किया। और उस रेखा को भी इंगित किया जहां त्रुटि होती है। त्रुटि/user.js –

+0

'UserModel' के अंदर त्रुटि' सूची 'विधि नहीं है। आपने इसे 'विधियों' का उपयोग करके 'UserModel' के उदाहरणों में जोड़ा।' आप इसे जोड़ने के लिए 'UserModel.list = list' कर सकते हैं। – WiredPrairie

उत्तर

5

methods मोंगोस में model ऑब्जेक्ट की संपत्ति मॉडल ऑब्जेक्ट्स के उदाहरणों में कार्यों को जोड़ने के लिए उपयोग की जाती है। तो, आपके कोड में, list फ़ंक्शन UserModel के उदाहरण में जोड़ा गया है। आप के बजाय एक static सिंगलटन समारोह की तरह है करने के लिए चाहते हैं, तो आप इसे सीधे UserModel वस्तु mongoose.model('UserModel', userModelSchema); करने के लिए कॉल द्वारा वापस करने के लिए जोड़ सकते हैं:

UserModel.list = list; 

अब, आप सभी उपयोगकर्ताओं की सूची वापस करने के लिए यह कह सकते हैं।

ध्यान दें कि यह अभी भी एक असीमित कार्य है। इसलिए, आप फ़ंक्शन को कॉल करने के नतीजे वापस नहीं कर सकते हैं, क्योंकि यह सामान्य रूप से खाली होगा। find async है, इसलिए अपने list समारोह भी एक कॉलबैक कि जब सूची लौटा दिया गया है कहा जा सकता है स्वीकार करने के लिए की जरूरत है:

UserModel.list(function(list) { 
    res.render(list); 
}); 
+0

आपके पिछले अनुच्छेद ने चीजों को मेरे लिए बहुत स्पष्ट बना दिया है। धन्यवाद ! मैं अब समझता हूँ । –

+1

स्टेटिक स्टेटिक्स का उपयोग करके स्टेटिक विधियों को भी परिभाषित किया जा सकता है - animalSchema.statics.findByName = function (name, cb) {} –