尝试使用mongodb使用node.js实现多租户系统时遇到的问题

我们有不同的客户,他们的想法是保持他们的数据在同一个应用程序中彼此分开。 我们用mongodb使用node.js,mongoose用于查询。

这是模型目录中的'index.js'文件

var mongoose = require('mongoose'); var fs = require('fs'); var connectionUrl = 'mongodbserverlink/'; var companies = [{ db: 'comp1_db', comp_id: 'com1' }, { db: 'com2_db', comp_id: 'com2' }, { db: 'com3_db', compa_id: 'com3'}]; var connections = {}; var models = {}; fs.readdirSync(__dirname) .forEach(function (file) { var Schema = file.split('.js')[0]; if (Schema === 'index') return; models[Schema] = require('./' + Schema); }); companies.forEach(function (company) { var conn = mongoose.createConnection(connectionUrl + company.db); connections[company.company_id] = {}; Object.keys(models).forEach(function (Schema) { connections[company.company_id][Schema] = conn.model(Schema, models[Schema]); }); conn.on('error', console.error.bind(console, company.db + ' connection error in mongodb in the first step!')); conn.once('open', function() { console.log(company.db + " mongodb connected"); }); }); module.exports = connections; 

这里正在build立与不同数据库的连接。 模型目录有这个索引文件。

现在在应用程序逻辑完成的控制器中,这就是我们正在做的事情。

 var models = require('../models'); var comp_id = req.body.comp_id; db.collectionname.find...(This is not the syntax for find, I just cut it short to keep it simple) // -> this is not working now 

当我们尝试logging模型对象,这是我们得到的

 models object is: {"com1":{},"com2":{},"com3":{}} 

只有db时logging给出{}

我们面临的问题就是把握整个工作……是因为写大部分的人不在我们这边,没有文件。

我们在这里做错了什么?

看起来您已经从索引文件中导出了模型。 所以,在控制器中,你可以做一个var models = require('index'); 。 从连接对象中,您可以检索相应的模型: var companyModel = models[comp_id];

希望能帮助到你。