[ 使用node-mongodb-native驱动 ]
连接模块mongo.js
var mongodb = require('mongodb'),
// 数据库连接缓存
cache = {};
function connect (url, options) {
var fns = [], status = 0, _db = cache[url];
return function (f) {
var args = arguments;
if (_db !== null && typeof _db === 'object') {
f.call(null, _db);
return;
}
fns.push(f);
// 当有一个连接初始化请求时,挂起其他初始化请求
// 连接池建立完后,使用该连接处理挂起的请求
if (status === 0) {
status = 1;
mongodb.MongoClient.connect(url, options, function (err, db) {
if (err) { throw err; }
_db = cache[url] = db;
for (var i = 0, len = fns.length; i < len; i++) {
fns.shift().call(null, _db);
}
});
}
};
}
module.connect = connect;
数据库连接配置文件database.json
{
"test" : {
"url" : "mongodb://root:123456[@127](/user/127).0.0.1:27017/test",
"options" : {
"server" : {
"poolSize" : 10
}
}
}
}
需要url, options,具体细节参看官方文档。
如何使用
var conf = require('./database.json');
var connect = require('mongo').connect(conf.test.url, conf.test.options);
connect(function (db) {
// 获得db的引用,如果没有建立连接池,则建立,否则使用连接池的连接
});
connect(function (db) {
// 获得db的引用,如果没有建立连接池,则建立,否则使用连接池的连接
});
...
13 回复
nodejs服务器 <-------> mongodb服务器
请求连接 ---------------
--------------- 收到请求
--------------- 同意连接
收到响应 ---------------
建立连接 ---------------
传送数据 ---------------
如果你想每次都这么费劲,可以不用内存池。
@hanzel21cn mongodb.MongoClient.connect(url, options, f)的时候,会跟mongodb服务器建立连接,并用options配置来设置mongodb服务器和nodejs的连接数。你只需要缓存回调函数f返回的db对象就可以了。