gpt4 book ai didi

node.js - 如何使用mongoose动态连接多个mongodb数据库?

转载 作者:IT老高 更新时间:2023-10-28 13:24:33 25 4
gpt4 key购买 nike

在我的项目中有很多数据库,一个是masterDb,其他都是基于masterDb的数据库连接。例如,在验证页面中,用户可以输入“公司 id”,这个“公司 id”可以通过 masterDb 进行检查,如果存在 id,则返回特定公司的数据库名称。使用我想连接到特定公司数据库的数据库名称。

现在我可以成功登录并获得数据库名称。使用这个数据库名称(req.headers['x-key-db'])我可以连接到特定的数据库。但在这里我将数据库连接代码放在每个 api 调用中。有没有其他方法可以创建一次并在每个 api 调用中动态使用它。

app.get('/api/student-limited/:_pageNumber/:_pageSize', function(req, res) {

var db = mongoose.createConnection();
db.open('mongodb://localhost:27017/'+req.headers['x-key-db']);
var ClassSection = db.model('ClassSections', SectionSchema);
var Student = db.model('Students', StudentSchema);

var _pageNumber = parseInt(req.params._pageNumber), _pageSize = parseInt(req.params._pageSize);
Student.find({}, function (err, _docs) {
if(_docs){
Student.find({}, null, {sort: { Name: 1} }).skip(_pageNumber > 0 ? ((_pageNumber-1)*_pageSize) : 0).limit(_pageSize).populate('_idClass').exec(function (err, docs) {
if(err)
res.json(err);
else
res.json({ "TotalCount" : _docs.length, "_Array" : docs});
});
}
});
});

最佳答案

您可以创建一个如下所示的模块,该模块将检查您需要的数据库的数据库连接是否已经存在。如果是,它将返回连接对象,否则将创建一个并返回它。

var mongoose = require('mongoose');

//Object holding all your connection strings
var connections = {};

exports.getDatabaseConnection = function(dbName) {

if(connections[dbName]) {
//database connection already exist. Return connection object
return connections[dbName];
} else {
connections[dbName] = mongoose.createConnection('mongodb://localhost:27017/' + dbName);
return connections[dbName];
}
}

假设您将上述文件命名为 data.js。您只需要在您拥有 API 代码的文件中要求此模块。您的 API 代码将更改为:

app.get('/api/student-limited/:_pageNumber/:_pageSize', function(req, res) {
//Call getDatabaseConnection function we created
var db = data.getDatabaseConnection(req.headers['x-key-db']);
var ClassSection = db.model('ClassSections', SectionSchema);
var Student = db.model('Students', StudentSchema);

var _pageNumber = parseInt(req.params._pageNumber), _pageSize = parseInt(req.params._pageSize);
Student.find({}, function (err, _docs) {
if(_docs){
Student.find({}, null, {sort: { Name: 1} }).skip(_pageNumber > 0 ? ((_pageNumber-1)*_pageSize) : 0).limit(_pageSize).populate('_idClass').exec(function (err, docs) {
if(err)
res.json(err);
else
res.json({ "TotalCount" : _docs.length, "_Array" : docs});
});
}
});
});

关于node.js - 如何使用mongoose动态连接多个mongodb数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252513/

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