2012-09-11 60 views
8

我想使用MongoDB的與node.js的連接和下面的教程在http://howtonode.org/express-mongodbnode.js的MongoDB的收盤

代碼用於打開連接

ArticleProvider = function(host, port) { 
this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {})); 
this.db.open(function(){}); 
}; 

但是我看不到任何連接正在關閉。 但是當我在mongo控制檯上看到日誌時,我可以看到這些連接打開並在一段時間後關閉。

連接是否自動關閉?當大量的客戶嘗試訪問服務器時會出現問題嗎?連接應該在哪裏關閉?

感謝

圖科

回答

6

在該示例應用程序中,只有一個ArticleProvider對象被創建供應用程序在提供請求時共享。該對象的構造函數打開一個數據庫連接,在應用程序終止之前不會關閉(這很好)。

因此,您應該看到的是,每次啓動應用程序時都會獲得新的mongo連接,但無論有多少客戶端訪問服務器,都不會創建其他連接。在你終止你的應用之後不久,你應該看到它的連接在Mongo端消失。

2

node-mongodb-native提供了Db的對象接近的方法,當你調用它完成,你可以關閉你的連接。

var that = this; 
this.db.open(function(){ 
    // do db work here 

    // close the connection 
    that.db.close(); 
}); 

如果您不關閉連接,事件循環會保持連接處於打開狀態,並且您的進程不會退出。如果您正在構建一個Web服務器,您的進程不會被終止,那麼您不必關閉連接。

node-mongodb-native的更好的參考可以在https://github.com/mongodb/node-mongodb-native找到。

0

請記住將db.close放在最後一個回調中,該回調將被執行,以便在所有回調完成之前連接處於打開狀態。否則,會出現如下錯誤:

/usr/local/lib/node_modules/mongodb/lib/utils.js:97 
    process.nextTick(function() { throw err; }); 
             ^
Error 
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17) 
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47) 
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17) 
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19)