2016-11-23 40 views
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":{}} 

,只有分贝登录时给出{}

我们正在抓的全部工作面临的问题...这是因为编写主要组块的人不在我们身边,也没有文档。

我们在这里做错了什么?

+0

出于好奇,保持数据与客户之一的要求是分开的,或者考虑到数据的性质,通常只是一个好主意。 –

+0

也许他们只是你的例子中的拼写错误,但是你的对象键有很多不一致之处。例如'connections [company.company_id] = {};''companies'数组中的对象使用'comp_id'而不是'company_id'作为关键字。最后一个'com3'实际上是'compa_id'。 'companies'数组中的第一个'db'值是'comp1_db',而其他的是'com2_db'和'com3_db'。所以,我会首先仔细检查你的变量/键/值的命名。你能发布一些与index.js相同的目录下的模型文件的例子吗? –

+0

@JeffKilbride其实我改变了实际的公司id - 原因很明显。代码在实际工作正常。 –

回答

0

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

希望它有帮助。

相关问题