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

Node.js 如何使用mongoose动态连接多个mongodb数据库?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,在我的项目中有很多数据库,一个是masterDb,所有其他的都是基于masterDb的数据库连接。例如,在验证页面中,用户可以输入“公司id”,可以使用masterDb检查该“公司id”,如果存在id,则返回特定公司的数据库名称。使用数据库名称,我希望连接到特定的公司数据库 现在我可以成功登录并获得db名称。使用这个数据库名(req.headers['x-key-db'])我可以连接到特定的数据库。但在这里,我将数据库连接代码放在每个api调用中。有没有其他方法可以创建一次并在每次api调用中动

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

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

app.get('/api/student limited/:_pageNumber/:_pageSize',函数(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(请求参数pageNumber),pageSize=parseInt(请求参数pageSize);
find({},函数(err,_docs){
如果(_文件){
Student.find({},null,{sort:{Name:1}})。skip({u pageNumber>0?({u pageNumber-1)*\u pageSize:0)。limit({u pageSize)。populate(''u idClass')。exec(函数(err,docs){
如果(错误)
res.json(err);
其他的
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});
             });
        }
    });
});

谢谢你的回答。数据库连接工作正常。:)看起来connections['dbName']应该是connections[dbName]嗨,我试过了,但抛出了一个错误,好像getDatabaseConnection不是一个函数。请推荐我