2017-04-23 24 views
0

我想將MongoDB連接對象用於不同的模塊。問題是每當我的app.js運行它應該實例化,然後我可以傳遞給模塊的其他功能。 基本上蒙戈連接應創建只有1次,如何在不同模塊中重用Mongo Db連接對象

目前我使用此代碼,每當我們要調用MongoDb.How我們可以重用回調函數之外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. 

回答

0

「假好主意」是使用的其他變量上的範圍來存儲你的數據庫實例:

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

然後,你可以在承諾包你的代碼有超過異步流更好的控制,避免了「回調地獄」 。我希望這有助於:)