Khi bạn require('somemodule')
và sau đó yêu cầu lại lần thứ hai, nó sẽ sử dụng phiên bản đã tải ALREADY. Điều này cho phép bạn tạo các đĩa đơn khá dễ dàng.
Vì vậy - bên trong 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;
Sau đó, bên trong 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);
})
}
Và bên trong b.js
:
var getMongoConnection = require('./sharedmongo.js');
module.exports = function (req, res) {
getMongoConnection(function(error, connection){
// do something else here
})
}
Ý tưởng là khi cả hai a.js
và b.js
gọi getMongoCollection
, lần đầu tiên nó sẽ kết nối và lần thứ hai nó sẽ trả về cái đã được kết nối. Bằng cách này, nó đảm bảo bạn đang sử dụng cùng một kết nối (ổ cắm).