在nodejs中为每个请求打开mongodb连接并在回调中关闭它是一个好习惯吗?
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超时或断开连接时,是否需要重新连接?
我在这里发现矛盾的答案是否关闭每个请求的 mongodb 连接
我阅读的几乎所有在线文档nodejs mongodb 本机驱动程序和示例代码,一个 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);
}
});
});