在Express中使用MongoClient的最佳方法是什么?客户端内部路由还是客户端内部路由?我已经看过关于这两个的一些教程,但是现在我混淆了哪个是正确的教程?
app.get('/',(req,res)=>{
MongoClient.connect('connection_str',(err,db)=>{
err? console.log(`Error: ${err}`) :
db.collection('collection_name',(err,docs)=>{
err? console.log(`Error: ${err}`) :
res.json(docs);
});
});
});
OR
MongoClient.connect('connection_str',(err,db)=>{
app.get('/',(req,res)=>{
db.collection('collection_name',(err,docs)=>{
err? console.log(`Error: ${err}`) :
res.json(docs);
});
});
});
第一个似乎很安全,但是在不同的路由上是多余的,而第二个对于不同的路由是理想的,我刚刚开始学习mern堆栈,并想只使用mongodb的本地mongo客户端代替mongoose。最好的方法是什么?谢谢!
答案 0 :(得分:2)
我不建议您使用当前使用的任何方法。相反,我建议您一次创建一个数据库连接,然后将该连接重新用于所有路由,或者也可以继续使用数据库池。
摘自官方文档:
连接池是由数据库维护的数据库连接的缓存。 驱动程序,以便在与服务器的新连接时可以重新使用连接 数据库是必需的。减少连接池的数量 由您的应用程序创建,我们建议调用 MongoClient.connect 一次并重用回调返回的数据库变量:
下面的示例显示了如何创建一次连接并重新使用连接:
yourArray["time"] = `${yourArray.year}-${yourArray.month}-${yourArray.day} ${yourArray.hours}:${yourArray.minutes}:${yourArray.seconds}`;
有关更多信息,请阅读official mongodb-native documentation