2012-04-10 75 views
2

我正在使用node-mongodb-native连接到本地MongoDB实例。我在包装如何处理连接方面遇到了一些麻烦。我已经尝试抽象MongoDB的东西到定制Database模块:如何处理Node/MongoDB连接管理?

Database.js

var mongo = require('mongodb'); 
var Database = function() { return this; }; 

Database.prototype.doStuff = function doStuff(callback) { 
    mongo.connect('mongodb://127.0.0.1:27017/testdb', function(err, conn) { 
     conn.collection('test', function(err, coll) { 
      coll.find({}, function(err, cursor) { 
       cursor.toArray(function(err, items) { 
        conn.close(); 
        return callback(err, items); 
       }); 
      }); 
     }); 
    }); 
}; 

// Testing 
new Database().doStuff(function(err, items) { 
    console.log(err, items); 
}); 

是否需要为每个方法一个新的连接?这似乎会非常快速地变得昂贵。我想到,也许连接将建立在构造函数中,随后的调用将利用现有的连接。

这下一个问题可能更多的是设计问题,但考虑如何建立连接和拆卸可能是昂贵的操作,我正在考虑添加一个数据库对象,它是我的应用程序的全局数据库,可用于调用到数据库。这看起来合理吗?

请注意,上面的代码大致取自here。谢谢你的帮助。

回答

2

对于每种方法,您都不需要新的连接 - 您可以打开一次并将其用于后续调用。这同样适用于各个集合变量 - 您可以将一次调用的结果缓存到collection(),这样可以让您只需要一次回调,而将其留在其他地方。