是否在nodejs中爲每個請求打開mongodb連接並在回調中關閉它是一個好習慣?mongodb nodejs本地驅動程序是否關閉連接
app.get('/some_route', function(){
MongoClient.connect(url,function(err, db){
//some db query with callback
db.collection("some_collection").findOne(doc, function(err,item){
if(err){
res.send(err);
//close db connection
db.close();
}else{
//do something with item
res.send(item);
//close db connection
db.close();
}
});
});
有的說,對每個請求打開/關閉的mongodb連接不是必要的,因爲一旦打開,連接池可以被共享。
問題是如何維護和共享該池?貓鼬是否已經自動做到了這一點?
尤其是,在mongodb超時或斷開連接時,是否需要重新連接?
我在這裏找到答案矛盾close mongodb connection per request or not
幾乎所有的在線文檔nodejs mongodb native driver和示例代碼我看了,一個db.open()是搭配db.close()某處回調。
因爲如果連接池是共享的,一個可能的代碼 根據christkv的回答,人們可能會代碼:
var p_db=null;
var c_opt = {server:{auto_reconnect:true}};
app.get('/some_route', function(){
//pseudo code
if (!p_db){
MongoClient.connect(url, c_opt, function(err,db){
p_db = db;
p_db.collection("some_collection").findOne(doc, function(err,item){
if(err){
res.send(err);
}else{
//do something with item
res.send(item);
}
});
});
}else {
p_db.collection("some_collection").findOne(doc, function(err,item){
if(err){
res.send(err);
}else{
//do something with item
res.send(item);
}
});
});
幾個月前我讀了mongoose src,他們爲每個集合打開一個連接,所以它只是緩存在變量中。不知道他們可能會改變。 我寫了一個連接模塊,並在app.listen之前運行它。 – wayne 2013-04-30 23:42:41