के बीच डीबी साझा करने के लिए वैश्विक चर का उपयोग करें मैं 'mongodb' मॉड्यूल का उपयोग कर एक नोडज/mongodb ऐप पर काम कर रहा हूँ। एप्लिकेशनमॉड्यूल
node main.js
साथ शुरू की है main.js में, मैं db से कनेक्ट और 'डाटाबेस' वैश्विक चर में कनेक्शन रखने के लिए। 'डीबी' का उपयोग तब 'सर्वर' के आंतरिक तरीकों में किया जाता है। मैं वैश्विक चर के रूप में 'डीबी' होने से बचना चाहता हूं लेकिन ऐसा करने का सही तरीका नहीं मिला।
मेरे वर्तमान main.js:
var server = require('./lib/server');
var MongoClient = require('mongodb').MongoClient;
var Server = require('mongodb').Server;
var mongoClient = new MongoClient(new Server(HOST, PORT));
db = null;
// Database connection
mongoClient.open(function(err, mongoClient) {
if(!err){
// Database selection
db = mongoClient.db(DB);
// Launch web server
server.start(); // usage of 'db' in this part
} else {
console.log(err.message);
process.exit(1);
}
});
एक क्लीनर रास्ते से किसी भी विचार?
अद्यतन
मैं अंत में connection.js में एक मॉड्यूल बनाया:
var config = require('../config/config');
var url = 'mongodb://' + config.db.host + ':' + config.db.port + '/' + config.db.name;
var MongoClient = require('mongodb').MongoClient;
var db = null;
module.exports = function(cb){
if(db){
cb(db);
return;
}
MongoClient.connect(url, function(err, conn) {
if(err){
console.log(err.message);
throw new Error(err);
} else {
db = conn;
cb(db);
}
});
}
हर बार जब मैं कनेक्शन मैं फोन प्राप्त करने की आवश्यकता:
var connection = require('./connection');
connection(function(db){
// doing some stuff with the db
});
यह बहुत काम कर रहा है कुंआ।
इस दृष्टिकोण के साथ कोई संभावित विफलता?
इसे किसी भी मॉड्यूल को किसी कन्स्ट्रक्टर (कन्स्ट्रक्टर निर्भरता इंजेक्शन) में उपयोग करने के लिए पास करें या उस मॉड्यूल में रखें जिसमें उस आवृत्ति है और अन्य मॉड्यूल की आवश्यकता है और डीबी इंस्टेंस और अन्य सेवाओं की आवश्यकता है (सेवा स्थान) (आमतौर पर) बदतर) –
यदि आप वास्तव में ग्लोबल्स के साथ रहने की योजना बना रहे हैं, तो मैं इसके बजाय 'global.db' का उपयोग करने का संकेत दूंगा। कम से कम, अवैध जेएस नहीं है। – gustavohenke
मैं इस वैश्विक से छुटकारा पाना चाहता हूं :) – Luc