2012-09-28 10 views
10

मेरे पास 2 ऐप्स हैं, प्रत्येक एक अलग फ़ोल्डर में हैं और उन्हें एक ही मॉडल साझा करने की आवश्यकता है।मैं 2 ऐप्स के बीच मोंगोस मॉडल कैसे साझा कर सकता हूं?

मैं एप्लिकेशन B में एक मॉडल फ़ोल्डर

मैं इस तथ्य के साथ मुद्दों में चल रहा हूँ करने के लिए एप्लिकेशन एक से मॉडल फ़ोल्डर सिमलिंक करना चाहते हैं कि एक बार आप mongoose.model में ('मॉडल', स्कीमा) कहते हैं ऐप ए, वे उस ऐप के मोंगोज़/मोंगोडब कनेक्शन के लिए 'बंधे' हैं।

क्या किसी के पास इसका प्रबंधन करने का सबसे अच्छा तरीका है?

+0

जब आप कहते हैं कि '2 ऐप्स' का मतलब है कि आप दो अलग-अलग नोड उदाहरण हैं, तो प्रत्येक ऐप्स में से प्रत्येक एक चल रहा है? – JohnnyHK

+0

हाँ, पूरी तरह से अलग ऐप्स हैं लेकिन वे एक ही डेटाबेस और इसलिए मॉडल साझा करेंगे। – evilcelery

+0

तब आपको कोई समस्या नहीं होनी चाहिए क्योंकि प्रत्येक ऐप को मॉडल का अपना सेट मिल जाएगा। आपने किस तरह के मुद्दों को देखा है? – JohnnyHK

उत्तर

2

मैं जो कर रहा हूं वह ऐप 2 में एक सबमिशन (गिट के साथ) के रूप में ऐप 1 आयात कर रहा था। इस तरह मॉडल को सामान्य के रूप में आयात किया जा सकता है और ऐप के डिफ़ॉल्ट mongoose कनेक्शन से बंधे हैं।

+3

यह बहुत दिलचस्प लगता है। क्या आप संभवतः विस्तृत कर सकते हैं? –

+0

यहां अधिक जानकारी: https://git-scm.com/docs/git-submodule – chemitaxis

1
./shared/models/user.js 

./app1/app.js 
var user = require('../shared/user.js'); 

./app2/app.js 
var user = require('../shared/user.js'); 

मैं नहीं देखता कि आप केवल साझा पथ से मॉडल क्यों लोड नहीं कर सके।

+1

यह मेरे लिए काम नहीं करता है, मॉडल के लिए कॉल ठीक है लेकिन मुझे खाली प्रश्न मिल गए हैं! सबमिशन समाधान पूरी तरह से काम करता है! –

8

आप इस

var mongoose = require('mongoose'); 
module.exports.mongoose = mongoose; 

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

की तरह कुछ कर रही का उपयोग कर अब "lib/user.js"

var mongoose = module.parent.mongoose; 
var model = mongoose.model('User', new mongoose.Schema({ ... }); 
module.exports = model; 

के अंदर तो तरह है कि आप की आवश्यकता हो सकती है कि यह कार्य करके चारों ओर अपने नेवला उदाहरण का हिस्सा है " lib/user.js "अन्य अनुप्रयोगों में

+0

यह एक अच्छा जवाब है। एक मामूली चिमटा यह है कि lib. user.js फ़ाइल को मॉड्यूल.parent.exports.mongoose का उपयोग करके मोंगोस को संदर्भित करने की आवश्यकता है। मैंने console.log (module.parent) करके यह निष्कर्ष निकाला है जो पैरेंट मॉड्यूल ऑब्जेक्ट ग्राफ़ प्रदर्शित करता है। –

3

मोंगोस मॉडल साझा करने के लिए मेरा दृष्टिकोण मोंगोस ऑब्जेक्ट को साझा मॉड्यूल के लिए एक तर्क के रूप में पास करना है जो स्कीमा को परिभाषित करता है और मॉडल बनाता है। तो साझा स्कीमा/मॉडलों के साथ फ़ाइल इस तरह दिखता है:

module.exports = function(mongoose) { 

    var packageSchema = new mongoose.Schema({ 
     title:   { type: String, required: true }, 
     description: String 
    }); 

    mongoose.model('Package', packageSchema, 'packages'); 
}; 

और फिर प्रत्येक परियोजना के लिए उन्हें इस तरह में की आवश्यकता है:

var mongoose = require('mongoose'); 
var mongo_url = process.env.MONGO_CONNECTION; 
mongoose.Promise = global.Promise; 

mongoose.connect(mongo_url, connectOpts); 
require('../../../shared/models/packages')(mongoose); 
0

आप अन्य NPM संकुल के बीच अपने नेवला पैकेज का पुन: उपयोग करना चाहते हैं, ऐसा करने का सबसे अच्छा तरीका शीर्ष स्तर के ऐप पर साझा पैकेज स्थापित करना है और फिर अन्य एनपीएम पैकेजों को आरंभ करने के लिए इसका उपयोग करना है। https://www.npmjs.com/package/mongoose-global

0

एक दृष्टिकोण जावास्क्रिप्ट वस्तु, और फिर आयात कि आपके ऐप्स के भीतर मॉडल बनाने में उपयोग करने के लिए वस्तु एक सादे में सार स्कीमा के लिए है:

आप इस NPM मॉड्यूल का उपयोग कर सकते हैं।

उदाहरण के लिए

, एक 'उत्पाद' स्कीमा के लिए:

www/APP1/ProductConfig.js

const ProductConfig = { 
    name: String, 
    cost: Number 
} 
module.exports = ProductConfig; 

www/APP1/ProductSchema.js

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const ProductConfig = require('./ProductConfig'); 

const Product = new Schema(Product); 

module.exports = mongoose.model('Product', Product); 

www/app2/productSchema.js

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const ProductConfig = require('../app1/ProductConfig'); 

const Product = new Schema(Product); 

module.exports = mongoose.model('Product', Product); 
संबंधित मुद्दे

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