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
を呼び出します 、1回目は接続し、2回目はすでに接続されているものを返します。このようにして、同じ接続(ソケット)を使用していることを確認します。