nodejs怎么实现类似AOP的代码?
发布于 9 年前 作者 fuhaiq 4988 次浏览 最后一次编辑是 8 年前 来自 问答

目前用到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)

2 回复

native驱动直连接不释放就好了啊

回到顶部