在Node.js中,每个请求都打开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连接是不必要的,因为一旦打开,就可以共享一组连接池。
问题是如何维护和共享这个池?mongoose是否已经自动完成了这个操作?
特别是在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);
}
});
});