繁体   English   中英

如何在不同模块中重用Mongo Db连接对象

[英]How to Reuse Mongo Db Connection Object in different module

我想使用MongoDB连接对象到其他模块。 问题是,每当我运行app.js时,它都应该实例化,然后我才能传递给模块的其他功能。 基本上,Mongo连接只能创建1次,

目前,无论何时我想调用MongoDb,我都在使用此代码。如何在回调函数之外重用MongoDb连接对象。

var mongodb = require("mongodb");

mongodb.MongoClient.connect(url, function (err, db) {
    if (err) {
        console.log(err);
        process.exit(1);
      }
     // Save database object from the callback for reuse.
     console.log("Database connection ready");
});

//let say here i want to use 
db.collection("cname").find({}) //but i am getting db as undefined.

“错误的好主意”是在上限范围内使用其他变量来存储数据库实例:

var mongodb = require("mongodb");
var dbInstance;

mongodb.MongoClient.connect(url, function (err, db) {
    if (err) {
        console.log(err);
        process.exit(1);
      }
     // Save database object from the callback for reuse.
     console.log("Database connection ready");
     dbInstance = db;
});
// Here I don't know if dbInstance is define or not -> big problem!

不过,如果这看起来不错,那就不是。 这将给您有关未定义dbInstance的错误。 mongodb.MongoClient.connect是异步的,因此在使用“ dbInstance”之前,您需要等待回调。 最好使用将数据库实例作为参数传递给的函数:

var mongodb = require("mongodb");
var myModule = require("myModule")
var useDbInstance = function useDbInstance(dbInstance) {    
    //let say here i want to use 
    dbInstance.collection("cname").find({});
    myModule(dbInstance)
        .doSomething();
};

mongodb.MongoClient.connect(url, function (err, db) {
    if (err) {
        console.log(err);
        process.exit(1);
      }
     // Save database object from the callback for reuse.
     console.log("Database connection ready");
     useDbInstance(db);
});

然后,您可以将代码包装在Promises中,以更好地控制异步流并避免“回调地狱”。

我希望这有帮助 :)

暂无
暂无

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

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