[英]How to dynamically select the database(or “schema”), in a Sequelize model?
我正在使用 Nodejs、Seuqelize 和 Mysql 构建一个多租户应用程序。
我已经决定了一种方法,每个租户都有一个单独的逻辑数据库(据我了解,在 Postgres 中这将被称为“模式”,但在 Mysql 中它只是一个“数据库”)。 我之所以选择这种方法,是因为在我的情况下,需要在Node 进程已经启动并建立数据库连接之后创建数据库,并且无法提前配置它们。
我不知道如何动态地(在 HTTP 请求期间)告诉 Sequelize model,应该使用哪个数据库,用于特定查询。
例如,假设我有这个 GET/photo/ 路线:
router.get('photo/', async function (req, res) {
const tenantId = req.user.id//Assume the auth middleware provides a tenant id.
try {
const records = await Photo.findAll()//Need to tell the Photo model, which database/schema this
//should be queried in
res.json(records);
} catch (error) {
console.log(error)
res.sendStatus(500)
}
})
当然,如果我使用原始查询,我会说
SELECT * FROM ${tenantId}.photo
但如果我使用的是 Sequelize,我想真正享受它的全部功能。
我如何知道照片 model 使用哪个数据库? 让我再次澄清一下,我不是在谈论物理数据库,而只是在谈论逻辑数据库。 主机是同一台主机,我只有一个连接。 Sequelize 配置的初始“数据库”参数是一个包含所有租户的数据库,并引用了他们各自的数据库。
您需要为要为其创建连接的每个模式创建一个新的Sequelize
实例。 模型需要动态定义,以便在创建 Model 并随后返回时传入正确的sequelize
实例。
sequelize
实例,如果不存在则创建sequelize
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.