如何使用MongoClient而不每次都编码“ client.close()”?

时间:2019-06-11 16:30:15

标签: javascript node.js mongodb promise callback

我尝试打包数据库连接以便更可重用。 我想实现:

const mongoPromise =MongoClient.connect(url,{ useNewUrlParser: true })
.then((client)=>{
      const db = client.db(dbName);

      // do something...

      client.close();
})
.catch(err=>console.log(err));

因此,我可以在其他地方使用它:

//For example
//query
mongoPromise.then((db)=>db.collection('user').find().toArray())

//insert
mongoPromise.then((db)=>db.collection('test').insert({...}))

查询或插入完成后,MongoClient将关闭


在第一种方法中,我只能通过混合使用回调和promise来找出解决方案。

将回调和promise混合在一起不好吗?

// First method
const mongoPromiseCallback =(callback)=>MongoClient.connect(url,{ useNewUrlParser: true })
.then(async(client)=>{
      const db = client.db(dbName);
      await callback(db);
      console.log("close the client");
      client.close();
})
.catch(err=>console.log(err))

mongoPromiseCallback(db=>db.collection('user').find().toArray())
.then(res=>console.log(res)));


在另一种方法中,我尝试仅使用promise,但我不知道 我可以在哪里关闭客户

// the other method
const mongoPromise =MongoClient.connect(url,{ useNewUrlParser: true })
.then((client)=>{
      const db = client.db(dbName);
      return new Promise(function(resolve, reject) {
        resolve(db);
      });
})
.catch(err=>console.log(err));

mongoPromise.then(db=>db.collection('user').find().toArray())
.then(res=>console.log("res"));

1 个答案:

答案 0 :(得分:0)

您始终可以重复使用在mongo中创建的db对象。在这里阅读它会回答问题How do I manage MongoDB connections in a Node.js web application?