MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

बाहरी मॉड्यूल में स्कीमा Node.js में काम नहीं कर रहा है

व्यक्तिगत रूप से मैंने सभी मॉडलों को मोंगोडब के साथ पंजीकृत करने के लिए एक इनिट विधि के साथ अलग "सामान्य" प्रोजेक्ट बनाया है, और किसी भी ऐप की ऐप.जेएस फ़ाइल में इनिट विधि को कॉल करें जिन्हें मॉडल तक पहुंच की आवश्यकता है।

  1. साझा प्रोजेक्ट बनाएं - मानक प्रक्रिया का पालन करते हुए एक नया नोड प्रोजेक्ट बनाएं।
  2. package.json - साझा किए गए प्रोजेक्ट में, अपना package.json सेट करें निम्नलिखित प्रविष्टि रखने के लिए फ़ाइल:

    "main": "index.js"
    
  3. एक मॉडल जोड़ें - एक नया models बनाएं आपके साझा प्रोजेक्ट के भीतर फ़ोल्डर, आपके सभी नेवला स्कीमा और प्लगइन्स को समाहित करने के लिए। मॉडल फ़ोल्डर में अपनी userSchema फ़ाइल जोड़ें और इसे user.js नाम दें ।

    var mongoose = require('mongoose');
    
    var userSchema = new mongoose.Schema({
        email: String
    });
    
    module.exports = mongoose.model('User', userSchema);
    
  4. 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;
    
  5. अपने common का संदर्भ लें परियोजना - हालांकि आप अपने साझा किए गए प्रोजेक्ट का संदर्भ देना चाहते हैं, package.json में साझा किए गए प्रोजेक्ट का संदर्भ जोड़ें अपने ऐप में फ़ाइल करें और इसे common . का नाम दें . व्यक्तिगत रूप से मैंने प्रोजेक्ट को स्टोर करने के लिए गिटहब का इस्तेमाल किया और रिपोजिटरी पथ का संदर्भ दिया। चूंकि मेरा भंडार निजी था, इसलिए मुझे पथ में एक कुंजी का उपयोग करना पड़ा, जो कि गिटहब समर्थन साइट पर कवर किया गया है।
  6. मॉडल को अपने ऐप्लिकेशन में शामिल करें - आपके ऐप के लिए प्रारंभ स्क्रिप्ट में (मान लें कि यह app.js . है इस उदाहरण के लिए) अपने common . का संदर्भ जोड़ें प्रोजेक्ट करें और init . को कॉल करें मोंगोडब सर्वर से कनेक्ट करने और मॉडलों को पंजीकृत करने की विधि।

    //at the top, near your other module dependencies
    var mongoose = require('mongoose')
      , common = require('common');
    
    common.init(mongoose);
    
  7. मॉडल का उपयोग अपने ऐप्लिकेशन में कहीं भी करें - अब जब नेवला में कनेक्शन पूल स्थापित हो गया है और मॉडल पंजीकृत हो गए हैं, तो आप अपने ऐप के किसी भी वर्ग के मॉडल का उपयोग कर सकते हैं। उदाहरण के लिए, मान लें कि आपके पास एक पृष्ठ है जो 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);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. प्रतिकृति सेट त्रुटि कोड 76

  2. 14.10 ब्रेक मोंगो से उबंटू 15.04 में अपग्रेड करें - कैसे ठीक करें?

  3. OData - MongoDB के साथ अजीब सूचकांक [नेवला:कास्ट त्रुटि]

  4. $in को दूसरे तर्क के रूप में एक सरणी की आवश्यकता है, पाया गया:अनुपलब्ध

  5. MongoDB गो ड्राइवर के साथ शुरुआत करना