繁体   English   中英

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

[英]What's the best way to structure MongoClient and express: Client inside routes or routes inside client?

在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);
      });
    });
});

要么

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

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

来自官方文档:

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

这是一个示例,显示如何创建一次连接并重新使用该连接:

var MongoClient = require('mongodb').MongoClient;
var db;

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) {
  if(err) throw err;

  db = database;

  // Start the application after the database connection is ready
  app.listen(3000);
  console.log("Listening on port 3000");
});

// Reuse database object in request handlers
app.get('/',(req,res)=>{
    db.collection('collection_name',(err,docs)=>{
        err ? console.log(`Error: ${err}`) :
           res.json(docs);
        });
    });
});

有关更多信息,请阅读mongodb-native官方文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM