CNode

nodejs怎么实现类似AOP的代码?

问答
Ffuhaiq发布于11 年前最后回复11 年前2 回复5804 浏览0 收藏

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

L
luoyjx#1·11 年前

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

F
fantasyni#2·11 年前

参考下 bearcat aop

参与回复
登录后即可参与回复。登录