我想用nodejs创建一个应用程序,其中不同的公司/客户端连接但使用不同的数据库。
例如:
在localhost上运行的应用程序nodej:3001
在localhost上运行的Mongo服务器:27017
客户端(CLIENT1)访问nodejs应用程序并修改数据 在其数据库中 - >本地主机:27017 /客户端1
- 中修改其数据
另一个客户端(CLIENT2)执行相同操作并访问该应用程序 nodejs但在localhost:27017 / client2
等每个注册申请的客户都要等。
-------- ---------- EDIT
我一直在测试得到我想要的东西,我想我已经想出了一个可能的解决方案。解决方案是创建与每个数据库访问的连接。当你完成访问断开连接时。我不知道这是否是一个很好的解决方案,但我认为它值得:
index.js
var express = require('express');
var app = express();
var repository = require('./demoqueryrepository')
app.get('/createdb', function (req, res) {
//TODO: With JWT decode get id client and pass like as param to repository
repository.crearDemo(req.query.id, function (err, resp) {
if (err) console.log(err)
else res.send("resp");
})
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
demomodel.js
var mongo = require('mongoose');
var Schema = mongo.Schema;
module.exports = mongo.model('demodto', new Schema({
Name: { type: String },
Code: { type: Number },
}));
demoqueryrepository.js
var _demo = require('./demoquerydto');
var mongo = require('mongoose')
var mongoconnect = require('./mongoconnect')
module.exports = {
crearDemo: function (idclient, callback) {
let newdemo = new _demo({
Name: " Demo " + idclient,
Code: idclient
})
mongoconnect.connect(idclient);
newdemo.save(function (error) {
if (error) callback(error, null);
else {
callback(null, "success");
mongo.disconnect();
}
})
}
}
mongoconnect.js
var mongo = require('mongoose')
module.exports = {
connect: function (idclient) {
mongo.connect('mongodb://localhost:27017/' + idclient, { useMongoClient: true }, function (err, res) {
if (err) console.log(err);
else console.log("Connected to db")
});
}
}
当我发起请求时:
本地主机:3000 / CREATEDB ID = 12
本地主机:3000 / CREATEDB ID = 13
本地主机:3000 / CREATEDB ID = 14
在数据库服务器上,使用那些id
创建数据库答案 0 :(得分:0)
您要做的是创建一个多租户nodejs应用程序。
您采取的方法有一些缺点:
您是否考虑过只有一个数据库,因为架构是相同的?如果您为每个客户端设置默认搜索范围,则可以照顾一个客户端不得不访问数据的常见担忧。
我遇到了同样的问题并写了blog post。