一个应用程序与nodejs,每个客户端不同的数据库

我想创build一个应用程序与不同的公司/客户端连接,但使用不同的数据库的nodejs。

例如:

  • 运行在localhost:3001上的应用程序nodejs

  • 在本地主机上运行的Mongo服务器:27017

  • 客户端(CLIENT1)访问nodejs应用程序并修改其数据库中的数据 – > localhost:27017 / client1

  • 另一个客户端(CLIENT2)执行相同的操作,并访问应用程序nodejs,但在localhost中修改其数据:27017 / client2

对于申请该应用程序的每个客户都是如此。

– – – – 编辑 – – – – –

我一直在testing的东西得到我想要的,我想我已经想出了一个可能的解决scheme。 解决scheme是创build一个连接到每个数据库访问。 当你完成访问断开连接。 我不知道这是否是一个好的解决scheme,但我认为这可能是值得的:

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创build数据库

在这里输入图像描述

你正在做的是做一个多租户nodejs应用程序。

你正在采取的方法有几个缺点:

  • 有一个通用数据库的用户ID将告诉哪个数据库连接,然后每个客户端。 这意味着你有n + 1连接。
  • 您的应用程序不会扩展,因为您总是会过度地提供/提供您的数据库,或者更糟糕地为每个新客户端进行部署更改。

你认为只有一个数据库,因为架构是相同的? 如果您将每个客户端的默认search范围都考虑在内,那么客户常常不得不访问数据。

我有同样的问题,并写了一篇关于它的博客文章 。