目前用到mongodb,然后用generic-pool做了个连接池:
var poolModule = require('generic-pool');
var MongoClient = require('mongodb').MongoClient;
var mongo = poolModule.Pool({
name: 'mongodb',
create: function (callback) {
MongoClient.connect('mongodb://localhost:27017/umbrella', {server: {poolSize: 1}}, callback);
},
destroy: function (db) {
db.close();
},
max: 10,
min: 1,
idleTimeoutMillis: 30000,
log: false
});
然后逻辑代码里面全是类似这种代码:
mongo.acquire(function (err, db) {
if (err) {
return cb(err);
}
db.collection('user').findOne(....., function(err, user){
mongo.release(db);
return cb(err, user);
});
});
每次都要都用调用 获取-操作-释放 的操作,哪次忘记敲回收链接的代码,那就完蛋了。。。 nodejs里面有没有类似aop的编程方式,把 获取-操作-释放 这一套操作封装一下?只需要写逻辑代码就好,类似下面的伪代码:
AOP.mongo(function(db){
db.collection('user').findOne(....., function(err, user){
return cb(err, user)
});
});
#顺便问一下:nodejs里面有必要对mongodb做连接池封装吗(generic-pool)?MongoClient已经默认带连接池的。(poolSize默认是5,我改成了1,为了配合generic-pool)