gpt4 book ai didi

javascript - 连接不同数据库+singleton+node.js

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:51 27 4
gpt4 key购买 nike

我想根据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);

它的未定义我知道这是因为在连接到数据库之前加载了路由(异步)。所以请建议我如何构建它,使其成为单例。提前致谢。

最佳答案

我认为你不需要在这里使用单例,因为你需要不同的连接。但如果问题是关于如何在 mongo 中管理异步,我会 promise 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

希望有帮助。

关于javascript - 连接不同数据库+singleton+node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50128232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com