Czy jest dobrą praktyką w nodejs, aby otworzyć połączenie mongodb na każde żądanie i zamknąć go w callbacku?mongodb nodejs natywny sterownik blisko połączenia lub nie
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();
}
});
});
Niektórzy stwierdzili, że otwarcie/zamknięcie połączenia mongodb na każdym żądaniu nie jest konieczne, ponieważ po otwarciu można udostępnić pulę połączeń.
Pytanie, jak konserwować i udostępniać tę pulę? Czy mangusta robi to automatycznie już?
W szczególności, na czas oczekiwania na mongody lub rozłączenie, czy trzeba go ponownie podłączyć?
znajdę sprzecznych odpowiedzi tutaj close mongodb connection per request or not
Prawie wszystkie doc nodejs mongodb native driver i przykładowy kod Internecie czytam, o db.open() jest powiązany z db.close() gdzieś w zwrotnego.
Bo jeśli pula połączenie jest dzielone, można kodować Według odpowiedź christkv za jeden kod może:
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);
}
});
});
Przeczytałem mangusta src kilka miesięcy temu, otwierają jedno połączenie na kolekcję, więc jest ono po prostu buforowane w zmiennej. nie jestem pewien, czy mogą się zmienić. Piszę moduł do połączenia i uruchomić go przed app.listen. – wayne