构造MongoClient和表达的最佳方法是什么:路由内的客户端还是客户端内的路由?

时间:2019-07-02 06:27:20

标签: javascript node.js mongodb express

在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。最好的方法是什么?谢谢!

1 个答案:

答案 0 :(得分:2)

我不建议您使用当前使用的任何方法。相反,我建议您一次创建一个数据库连接,然后将该连接重新用于所有路由,或者也可以继续使用数据库池。

摘自官方文档:

  

连接池是由数据库维护的数据库连接的缓存。   驱动程序,以便在与服务器的新连接时可以重新使用连接   数据库是必需的。减少连接池的数量   由您的应用程序创建,我们建议调用 MongoClient.connect   一次并重用回调返回的数据库变量:

下面的示例显示了如何创建一次连接并重新使用连接:

yourArray["time"] = `${yourArray.year}-${yourArray.month}-${yourArray.day} ${yourArray.hours}:${yourArray.minutes}:${yourArray.seconds}`;

有关更多信息,请阅读official mongodb-native documentation