簡體   English   中英

連接到其他數據庫+ singleton + node.js

[英]connect to different database +singleton + node.js

我想基於Redis配置連接到其他數據庫(MongoDB)。 因此,我必須閱讀redis數據庫並進行數據庫連接(MongoDb)。 還必須確保其單例。

我試過的是

dbConenction.js:

var MongoClient = require('mongodb').MongoClient;
var db;
var connectDatabase = function connectDatabase(url)  {
    if (!db) {

        //var connectionString  = "mongodb://"+userName + ":" + password + "@" + host+ "27017/" +db;
        console.log(url); 
        //db = mysql.createConnection(settings);
        //MongoClient.connect(connectionString)

        MongoClient.connect(url, function(err, db){
            if(!err) {
                console.log("ddddddddd");
                console.log(db);
                console.log('Database is connected!');
                db = db;                
            } else {
                console.log('Error connecting database!');                
            }
        });
    }
}

module.exports.connectDatabase = connectDatabase;
module.exports.db = db;

在app.js中:

var url = "mongodb://127.0.0.1:27017/pal";-----> this need to be read from Redis Database.
global.db = require('./db/dbConnection').connectDatabase(url)

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var configureRouter = require('./routes/configure');
var validationRouter = require('./routes/datavalidations');

在我的routes.js中

我打印了以下內容

console.log("db");
console.log(db);

它的Undefined我知道這是因為在連接到DB之前,已加載路由(異步)。 因此,請提出建議,我該如何設計它,使其單例。 提前致謝。

我認為您不需要在這里使用單例,b / c您不需要其他連接。 但是如果問題是關於如何在mongo中管理異步,我會承諾mongo,即:

const Promise = require("bluebird");
const MongoDB = require("mongodb");
const { MongoClient } = MongoDB;

Promise.promisifyAll(MongoDB);

module.exports.connectDatabase = (url) => MongoClient.connect(url);

然后以這種方式使用它:

const c = require('./connectSingleton');

c.connectDatabase('mongodb://127.0.0.1:27017/pal')
.then( db => {
    //your db operations
    db.close();
})
.catch( err => {
    //exception handler here
});

實際上,還有其他一些庫可以在mongo中管理異步,例如mongodb-promisified

此外,您還可以查看有關已回答的關於蒙哥馬幣的問題

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM