我正在使用 Nodejs、Seuqelize 和 Mysql 构建一个多租户应用程序。
我决定采用一种方法,每个租户都有一个单独的逻辑数据库(据我所知,在 Postgres 中这被称为“模式”,但在 Mysql 中它只是一个“数据库”)。我选择这种方法,因为在我的例子中,需要在 Node 进程启动之后创建数据库,并建立数据库连接,并且无法提前配置它们。 我不知道如何动态(在 HTTP 请求期间)告诉 Sequelize 模型,对于特定查询应该使用哪个数据库。
例如,假设我有这个 GET/照片/路线:
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,我想真正享受它的全部功能。
我如何知道照片模型使用哪个数据库?让我再次澄清一下,
我不是在谈论物理数据库,而只是一个逻辑数据库。主机是同一台主机,并且我只有一个连接。 Sequelize 配置的初始“数据库”参数是一个保存所有租户的数据库,并引用其各自的数据库。
Sequelize
实例。需要动态定义模型,以便在创建模型并随后返回时传入正确的
sequelize
实例。
getPhotoModelFor(tenantId) - 尝试获取特定租户的模型sequelize
sequelize