簡體   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