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 - 原因很明顯。代碼在實際工作正常。 –