【问题标题】:Connect mysql database based on route in express.js with sequelize根据express.js中的路由连接mysql数据库和sequelize
【发布时间】:2018-11-09 14:28:55
【问题描述】:

我正在构建多租户应用程序,其中每个客户端都有单独的数据库。

sequelize中是否可以根据路由改变数据库连接?

我有两条路线

  1. scale.com/ss94545

  2. scale.com/mn94545

登录后,用户将被重定向到 scale.com/ss94545,以获取其特定站点的所有数据。

另一个 mn94545 站点使用单独的数据库,因此如果他们想获取所有数据,他们必须访问 scale.com/mn94545。

每个安装都有自己的数据库,所有数据库都有相同的架构。

是否可以根据访问的路由更改数据库连接?

这是我的基本静态续集数据连接:

const sequelize = new Sequelize('ss94545', 'root', 'root', {
  host: '127.0.0.1',
  port: 3306,
  dialect: 'mysql',
  logging: false,
});

【问题讨论】:

  • 解决此问题的另一种方法是在服务器启动时创建两个 sequelize 对象。现在在您的路线中,您可以使用连接到正确数据库的 sequelize 对象。希望你没有很多数据库。在运行时连接到 db 成本很高,并且会减慢您的请求。

标签: mysql node.js sequelize.js multi-tenant saas


【解决方案1】:

您是否尝试过将数据库名称设为路由参数,然后再实例化 sequelize?假设您可能正在使用 express,它会像这样......

app.get('/:dbname', function(req, res) {
  const sequelize = new Sequelize(req.params.dbname, 'root', 'root', {
    host: '127.0.0.1',
    port: 3306,
    dialect: 'mysql',
    logging: false,
  });
  //insert sequelize code here
  res.send('test ' + req.params.dbname);
});

【讨论】:

  • 如果我这样做,我可以编写我的表模式,表只能在那个函数内部同步,我不能在我的函数之外做。
  • 啊,如何实例化两者但使用不同的名称。 const db1 = new Sequelize('ss94545', 'root', 'root', { host: '127.0.0.1', port: 3306, dialect: 'mysql', logging: false, }); const db2 = new Sequelize('mn94545', 'root', 'root', { host: '127.0.0.1', port: 3306, dialect: 'mysql', logging: false, });
  • 然后,在你的 ss 路由中,只触摸 db1。在你的 mn 路由中,只触摸 db2。
  • 它的SaaS应用,所以有机会超过1000分贝!所以放置静态是没有意义的。
猜你喜欢
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 2017-07-18
  • 2021-11-13
  • 2021-10-04
  • 2019-07-14
  • 1970-01-01
相关资源
最近更新 更多