2012-04-10 99 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(),這樣可以讓您只需要一次回調,而將其留在其他地方。