【问题标题】:connect to different database +singleton + node.js连接到不同的数据库 +singleton + node.js
【发布时间】:2018-10-12 04:26:31
【问题描述】:

我想根据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 = db; - 有点混乱,尝试为内部数据库使用不同的名称 - 即 connectedDb。
  • @Alex 谢谢。知道我该如何构建这个吗??
  • 路由如何获取DB连接?

标签: javascript node.js dbconnection


【解决方案1】:

我认为您不需要在这里使用单例,因为您需要不同的连接。但如果问题是关于如何在 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

另外,你可以看看already answered question about promisifying mongo

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2014-11-25
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多