व्यक्तिगत रूप से मैंने सभी मॉडलों को मोंगोडब के साथ पंजीकृत करने के लिए एक इनिट विधि के साथ अलग "सामान्य" प्रोजेक्ट बनाया है, और किसी भी ऐप की ऐप.जेएस फ़ाइल में इनिट विधि को कॉल करें जिन्हें मॉडल तक पहुंच की आवश्यकता है।
- साझा प्रोजेक्ट बनाएं - मानक प्रक्रिया का पालन करते हुए एक नया नोड प्रोजेक्ट बनाएं।
-
package.json - साझा किए गए प्रोजेक्ट में, अपना
package.json
सेट करें निम्नलिखित प्रविष्टि रखने के लिए फ़ाइल:"main": "index.js"
-
एक मॉडल जोड़ें - एक नया
models
बनाएं आपके साझा प्रोजेक्ट के भीतर फ़ोल्डर, आपके सभी नेवला स्कीमा और प्लगइन्स को समाहित करने के लिए। मॉडल फ़ोल्डर में अपनी userSchema फ़ाइल जोड़ें और इसेuser.js
नाम दें ।var mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ email: String }); module.exports = mongoose.model('User', userSchema);
-
index.js - फिर प्रोजेक्ट के रूट में
index.js
फ़ाइल एक साझा ऑब्जेक्ट बनाएं जिसका उपयोग आपके ऐप्स द्वारा किया जा सकता है, मॉडल और एकinit
. को उजागर कर सकता है तरीका। इसे कोड करने के कई तरीके हैं, लेकिन मैं यह कैसे कर रहा हूं:function Common() { //empty array to hold mongoose Schemas this.models = {}; } Common.prototype.init = function(mongoose) { mongoose.connect('your mongodb connection string goes here'); require('./models/user'); //add more model references here //This is just to make referencing the models easier within your apps, so you don't have to use strings. The model name you use here must match the name you used in the schema file this.models = { user: mongoose.model('User') } } var common = new Common(); module.exports = common;
- अपने
common
का संदर्भ लें परियोजना - हालांकि आप अपने साझा किए गए प्रोजेक्ट का संदर्भ देना चाहते हैं,package.json
में साझा किए गए प्रोजेक्ट का संदर्भ जोड़ें अपने ऐप में फ़ाइल करें और इसेcommon
. का नाम दें . व्यक्तिगत रूप से मैंने प्रोजेक्ट को स्टोर करने के लिए गिटहब का इस्तेमाल किया और रिपोजिटरी पथ का संदर्भ दिया। चूंकि मेरा भंडार निजी था, इसलिए मुझे पथ में एक कुंजी का उपयोग करना पड़ा, जो कि गिटहब समर्थन साइट पर कवर किया गया है। -
मॉडल को अपने ऐप्लिकेशन में शामिल करें - आपके ऐप के लिए प्रारंभ स्क्रिप्ट में (मान लें कि यह
app.js
. है इस उदाहरण के लिए) अपनेcommon
. का संदर्भ जोड़ें प्रोजेक्ट करें औरinit
. को कॉल करें मोंगोडब सर्वर से कनेक्ट करने और मॉडलों को पंजीकृत करने की विधि।//at the top, near your other module dependencies var mongoose = require('mongoose') , common = require('common'); common.init(mongoose);
-
मॉडल का उपयोग अपने ऐप्लिकेशन में कहीं भी करें - अब जब नेवला में कनेक्शन पूल स्थापित हो गया है और मॉडल पंजीकृत हो गए हैं, तो आप अपने ऐप के किसी भी वर्ग के मॉडल का उपयोग कर सकते हैं। उदाहरण के लिए, मान लें कि आपके पास एक पृष्ठ है जो
user
. के बारे में जानकारी प्रदर्शित करता है आप इसे इस तरह कर सकते हैं (अवांछित कोड, बस इसे एक उदाहरण के लिए लिखा है):var common = require('common'); app.get('/user-profile/:id', function(req, res) { common.models.user.findById(req.params.id, function(err, user) { if (err) console.log(err.message); //do something else to handle the error else res.render('user-profile', {model: {user: user}}); }); });
संपादित करें क्षमा करें, मुझे वह रेखा नहीं दिखाई दी जहाँ आप एक स्कीमा को दूसरे से इनहेरिट कर रहे थे। जैसा कि अन्य उत्तरों में से एक में कहा गया है, नेवला पहले से ही एक plugin
. की अवधारणा प्रदान करता है . ऊपर अपने उदाहरण में, आप यह करेंगे:
आपके सामान्य मॉड्यूल में, '/models/base-profile-plugin.js' के अंतर्गत
module.exports = exports = function baseProfilePlugin(schema, options){
//These paths will be added to any schema that uses this plugin
schema.add({
_user: {type: Schema.Types.ObjectId, ref: 'User', required: true},
name: {type: String, required: true},
bio: {type: String, required: true},
pictureLink: String
});
//you can also add static or instance methods or shared getter/setter handling logic here. See the plugin documentation on the mongoose website.
}
आपके सामान्य मॉड्यूल में, '/models/entrepreneur.js
. के अंतर्गतvar mongoose = require('mongoose')
, basePlugin = require('./base-profile-plugin.js');
var entrepreneurSchema = new mongoose.Schema({
mentors: {type: Schema.Types.ObjectId, ref: 'Mentor'}
});
entrepreneurSchema.plugin(basePlugin);
module.exports = mongoose.model('Entrepreneur', entrepreneurSchema);