2016-11-23 65 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];

希望它有幫助。

相關問題