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

时间:2017-08-07 15:46:35

标签: node.js mongodb mongoose

我想用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

创建数据库

enter image description here

1 个答案:

答案 0 :(得分:0)

您要做的是创建一个多租户nodejs应用程序。

您采取的方法有一些缺点:

  • 有一个用于用户id的公共数据库,它将告诉连接哪个数据库,然后每个客户端一个数据库。这意味着您有n + 1个连接。
  • 您的应用程序将无法扩展,因为您将始终超出配置/配置数据库或更糟糕地部署每个新客户端的更改。

您是否考虑过只有一个数据库,因为架构是相同的?如果您为每个客户端设置默认搜索范围,则可以照顾一个客户端不得不访问数据的常见担忧。

我遇到了同样的问题并写了blog post