एक एकल स्वयं के मॉड्यूल में मोंगो कनेक्शन पूल प्रबंधित करें। यह दृष्टिकोण दो लाभ प्रदान करता है। सबसे पहले यह आपके कोड को मॉड्यूलर और परीक्षण के लिए आसान रखता है। दूसरी बात यह है कि आपके डेटाबेस कनेक्शन को आपके अनुरोध ऑब्जेक्ट में मिलाने के लिए मजबूर नहीं किया जाता है जो डेटाबेस कनेक्शन ऑब्जेक्ट के लिए जगह नहीं है। (जावास्क्रिप्ट की प्रकृति को देखते हुए मैं पुस्तकालय कोड द्वारा निर्मित किसी भी वस्तु में किसी भी चीज को मिलाना बहुत खतरनाक समझूंगा)। तो इसके साथ आपको केवल एक मॉड्यूल पर विचार करने की आवश्यकता है जो दो तरीकों का निर्यात करता है। connect = () => Promise
और get = () => dbConnectionObject
।
इस तरह के एक मॉड्यूल के साथ आप सबसे पहले डेटाबेस से जुड़ सकते हैं
// runs in boot.js or what ever file your application starts with
const db = require('./myAwesomeDbModule');
db.connect()
.then(() => console.log('database connected'))
.then(() => bootMyApplication())
.catch((e) => {
console.error(e);
// Always hard exit on a database connection error
process.exit(1);
});
जब उड़ान में आपका ऐप बस कॉल कर सकता है get()
जब उसे डीबी कनेक्शन की आवश्यकता होती है।
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
यदि आप अपने डीबी मॉड्यूल को उसी तरह सेट करते हैं, तो न केवल निम्नलिखित के लिए आपके पास यह सुनिश्चित करने का एक तरीका होगा कि आपका आवेदन तब तक बूट नहीं होगा जब तक कि आपके पास एक डेटाबेस कनेक्शन न हो, आपके पास अपने डेटाबेस कनेक्शन पूल तक पहुंचने का एक वैश्विक तरीका है जो त्रुटि देगा अगर आपको कनेक्शन नहीं मिला है।
// myAwesomeDbModule.js
let connection = null;
module.exports.connect = () => new Promise((resolve, reject) => {
MongoClient.connect(url, option, function(err, db) {
if (err) { reject(err); return; };
resolve(db);
connection = db;
});
});
module.exports.get = () => {
if(!connection) {
throw new Error('Call connect first!');
}
return connection;
}