подключиться к другой базе данных + singleton + node.js

1

Я хочу подключиться к другой базе данных (MongoDB) на основе конфигурации Redis. Поэтому мне нужно прочитать базу данных 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');

на моих маршрутах.js

Я напечатал следующее

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

Его Undefined я знаю, это потому, что перед подключением к БД маршруты загружаются (асинхронно). Поэтому, пожалуйста, предложите мне, как я могу это сделать, чтобы его синглтон. Заранее спасибо.

  • 0
    дБ = дБ; - немного сбивает с толку, попробуйте использовать другое имя для внутреннего БД - то есть подключенного БД.
  • 0
    @Alex Алекс Спасибо. Любая идея, как я могу это архитектор ??
Показать ещё 1 комментарий
Теги:

1 ответ

0

Я не думаю, что вам нужно использовать singleton здесь, b/c вам нужны разные подключения. Но если вопрос о том, как управлять асинхронным в монго, я бы обещал 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
});

На самом деле есть некоторые другие библиотеки для управления async в mongo, например mongodb-promisified.

Кроме того, вы можете взглянуть на уже ответивший вопрос о promingifying mongo

Надеюсь, поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню