mysql - Node.js 中多个 Mysql 数据库的池连接

标签 mysql node.js multi-tenant

我正在尝试创建一个 Multi-Tenancy node.js应用程序(还有子域),其中每个用户在单个主机下都有自己的数据库(例如rds实例)。

因此,我可以更轻松地将数据库移交给该特定用户来访问该特定数据库。

所以我的问题是,当用户请求API时,是否可以根据请求动态更改数据库名称。

我脑海中浮现的一件事是创建一个具有可以访问所有数据库的凭据的池连接,并在查询中添加数据库名称,这样我就可以实现我想要的,但只是出于好奇可以在创建连接池后添加数据库名称,而不将其添加到查询中。

我的解决方案:

select * from 'dbname'.users

我在寻找什么:

const pool = mysql.createPool({
    host: process.env.DB_HOST,
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    // database: process.env.DB_NAME, leaving out since db name should be dynamic
    connectionLimit: 5,
    supportBigNumbers: true,
});

在中间件中,当我需要数据库访问时,我应该能够根据请求设置数据库名称。

这背后的原因是,我已经创建了应用程序并编写了没有数据库名称的查询,现在我应该将逻辑添加到应用程序中的每个查询中。

最佳答案

阅读官方文档:https://github.com/mysqljs/mysql/blob/master/Readme.md#connection-options

提到数据库选项是可选的。 您可以在初始化池时放弃此选项,并在 SQL 查询中指定正确的数据库。您无法在没有数据库配置的情况下创建池,然后将数据库设置为连接。您必须为此目的使用查询。

关于mysql - Node.js 中多个 Mysql 数据库的池连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58747264/

相关文章:

php - 如何在 PHP 中检测包含 mysql_query 字符串的字符串变量?

php - 我将 codeigniter web 应用程序移至测试服务器,但现在我没有将任何数据插入到我的表中?

javascript - 为什么这个模块不打印

spring - Spring 中的 Hibernate Multi-Tenancy 和异步执行(通过 @Async、@Scheduled 等)

mongodb - MongoDB 中 Multi-Tenancy 数据库的推荐方法是什么?

mysql - mySQL 表上的多个联接

php - 当从数据库中获取的数据存储在文本字段中时,如何自动移动下一页

node.js - 如何将node.js应用程序部署到云服务器

Node.js async.series 与现有功能

azure - 将 Multi-Tenancy 项目发布到 Azure 时自定义 web.config