2
我们有不同的客户端,他们的想法是在相同的应用程序中将他们的数据彼此分开。我们用mongodb使用node.js,猫鼬用于查询。尝试使用mongodb使用node.js实现多租户系统时遇到问题
这是“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;
这里的连接正在与不同数据库文件。模型目录具有此索引文件。
现在在应用程序逻辑正在完成的控制器中,这就是我们正在做的。
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
,当我们试图记录模型对象,这是我们得到了什么
models object is: {"com1":{},"com2":{},"com3":{}}
,只有分贝登录时给出{}
我们正在抓的全部工作面临的问题...这是因为编写主要组块的人不在我们身边,也没有文档。
我们在这里做错了什么?
出于好奇,保持数据与客户之一的要求是分开的,或者考虑到数据的性质,通常只是一个好主意。 –
也许他们只是你的例子中的拼写错误,但是你的对象键有很多不一致之处。例如'connections [company.company_id] = {};''companies'数组中的对象使用'comp_id'而不是'company_id'作为关键字。最后一个'com3'实际上是'compa_id'。 'companies'数组中的第一个'db'值是'comp1_db',而其他的是'com2_db'和'com3_db'。所以,我会首先仔细检查你的变量/键/值的命名。你能发布一些与index.js相同的目录下的模型文件的例子吗? –
@JeffKilbride其实我改变了实际的公司id - 原因很明显。代码在实际工作正常。 –