जब आपको require('somemodule')
और फिर इसे दूसरी बार फिर से चाहिए, यह पहले से लोड किए गए इंस्टेंस का उपयोग करेगा। इससे आप आसानी से सिंगलटन बना सकते हैं।
तो - sharedmongo.js
. के अंदर :
var mongo = require('mongodb');
// this variable will be used to hold the singleton connection
var mongoCollection = null;
var getMongoConnection = function(readyCallback) {
if (mongoCollection) {
readyCallback(null, mongoCollection);
return;
}
// get the connection
var server = new mongo.Server('127.0.0.1', 27017, {
auto_reconnect: true
});
// get a handle on the database
var db = new mongo.Db('squares', server);
db.open(function(error, databaseConnection) {
databaseConnection.createCollection('testCollection', function(error, collection) {
if (!error) {
mongoCollection = collection;
}
// now we have a connection
if (readyCallback) readyCallback(error, mongoCollection);
});
});
};
module.exports = getMongoConnection;
फिर a.js
. के अंदर :
var getMongoConnection = require('./sharedmongo.js');
var b = require('./b.js');
module.exports = function (req, res) {
getMongoConnection(function(error, connection){
// you can use the Mongo connection inside of a here
// pass control to b - you don't need to pass the mongo
b(req, res);
})
}
और b.js
. के अंदर :
var getMongoConnection = require('./sharedmongo.js');
module.exports = function (req, res) {
getMongoConnection(function(error, connection){
// do something else here
})
}
विचार यह है कि जब दोनों a.js
और b.js
कॉल करें getMongoCollection
, पहली बार यह कनेक्ट होगा, और दूसरी बार यह पहले से कनेक्टेड को वापस करेगा। इस तरह यह सुनिश्चित करता है कि आप एक ही कनेक्शन (सॉकेट) का उपयोग कर रहे हैं।