2014-02-19 71 views
1

我有多個連接到mongodb的問題。我使用node.js和貓鼬連接到mongo。 我的簡單網頁只是連接,執行少量查詢,然後關閉連接。但是當我重定向到另一個頁面時,連接會打開兩次。如果我重新加載/重定向頁面,另一個連接打開。不需要mongodb的多個連接

我通過

mongoose.connection.on('connected', function() { 
    console.log('Connected to mongo server.'); 

}); 
mongoose.connection.on('error', function (err) { 
    console.log('Could not connect to mongo server!'); 
}); 


mongoose.connect(mongoUrl); 

連接到數據庫並斷開與

mongoose.connection.close(function(){ 
     console.log('connection closed'); 
    }); 

日誌顯示,該連接被關閉。但如果我刷新第4x頁,我在日誌中看到

Connected to mongo server. 
Connected to mongo server. 
Connected to mongo server. 
Connected to mongo server. 

我錯過了什麼?

MongoDB中的日誌是這樣的(我敢肯定,連接功能只調用一次)

Wed Feb 19 18:56:54.780 [initandlisten] connection accepted from 127.0.0.1:59777 #261 (1 connection now open) 
Wed Feb 19 18:56:54.783 [initandlisten] connection accepted from 127.0.0.1:59778 #262 (2 connections now open) 
Wed Feb 19 18:56:54.784 [initandlisten] connection accepted from 127.0.0.1:59779 #263 (3 connections now open) 
Wed Feb 19 18:56:54.787 [initandlisten] connection accepted from 127.0.0.1:59780 #264 (4 connections now open) 
Wed Feb 19 18:56:54.788 [initandlisten] connection accepted from 127.0.0.1:59781 #265 (5 connections now open) 
Wed Feb 19 18:56:54.839 [conn261] end connection 127.0.0.1:59777 (4 connections now open) 
Wed Feb 19 18:56:54.839 [conn262] end connection 127.0.0.1:59778 (3 connections now open) 
Wed Feb 19 18:56:54.840 [conn263] end connection 127.0.0.1:59779 (2 connections now open) 
Wed Feb 19 18:56:54.840 [conn264] end connection 127.0.0.1:59780 (2 connections now open) 
Wed Feb 19 18:56:54.840 [conn265] end connection 127.0.0.1:59781 (1 connection now open) 

整個代碼在GitHub上:https://github.com/kraag22/graphs/blob/master/app/mongo.js

回答

1

我在這裏短暫調整它LY看着你的代碼在GitHub上

我敢肯定,連接函數被調用一次

是的,每個請求一次。在你的代碼有意識地創造每個請求一個連接,所以我不明白你爲什麼是由

但是,當我重定向到另一個頁面,打開連接兩次的事實感到驚訝。如果我重新加載/重定向頁面,另一個連接打開。

多個請求會創建多個連接嗎?也許你真正的問題是「爲什麼我在日誌中看不到這樣的東西?」

Connected to mongo server. 
Connection closed. 
Connected to mongo server. 
Connection closed. 
Connected to mongo server. 
Connection closed. 
... 

拳答案(治癒症狀不是疾病):mongoose.connect創建一個單獨的連接,如果你真的想創建每個請求一個連接,您必須使用mongoose.createConnection看到http://mongoosejs.com/docs/connections.html

的多個連接

到目前爲止,我們已經看到了如何使用Mongoose的默認連接來連接到MongoDB。有時候我們可能需要Mongo開放的多個連接,每個連接都有不同的讀/寫設置,或者可能只是針對不同的數據庫。在這些情況下,我們可以利用mongoose.createConnection()來接受已經討論過的所有參數,併爲您返回一個新的連接。

第二個答案(治癒疾病):我在使用NodeJS時發現了一個概念錯誤。您不應該爲每個請求創建一個連接,NodeJS不像PHP那樣處理(每個請求一個進程,每個請求一個數據庫連接),NodeJS可以在同一進程中處理多個併發請求,與共享相同的資源,實際上是一個MongoDB連接

當服務器啓動時,您應該真的創建一個MongoDB連接,並讓所有請求共享相同的連接。 Here在一個文件由於您們實際使用MEAN堆棧

一個簡單的例子(MongoDB中,ExpressJS,AngularJS,的NodeJS),除了AngularJS,你應該看看http://www.mean.io

+0

是的,這也正是它。 「當服務器啓動時,您應該真的創建一個MongoDB連接,並讓所有請求共享相同的連接。」 – kraag22