各リクエストごとにmongodb接続を開いてコールバックで閉じるのは、nodejsの良い方法ですか?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()どこかと対になっています。
接続のプールが共有されている場合、1はchristkvの答えによると をコード化する可能性があるため、1つのかもしれないコード:
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を読んでいます。コレクションごとに1つの接続をオープンしているので、変数にキャッシュされているだけです。彼らが変わったかもしれないと確信している 私は接続のためのモジュールを書いてapp.listenの前に実行します。 – wayne