如何在运行时更改 PrismaClient 数据库连接?

时间:2021-06-29 07:55:16

标签: prisma

我有 .env 文件

DATABASE_URL="sqlserver://srv:50119;initial catalog=mydb;user=aaa;password=bbb;"

然后像 schema.prisma

datasource db {
  provider = "sqlserver"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
  previewFeatures = ["microsoftSqlServer"]
}

我使用以下方法生成客户端:

npx prisma generate

然后 Prisma 在我的快速应用程序中使用:

const prisma = new PrismaClient();

假设我想为用户使用不同的数据库进行多租户,我该如何实现?理想情况下,我想在运行时切换 db 连接,但似乎 DATABASE_URL 仅在 Prisma 生成期间读取,而不是在运行时读取,因此生成的客户端最终会使用硬编码的 db url。

2 个答案:

答案 0 :(得分:0)

您可以使用 this 创建新的 PrismaClient 实例并传递动态 URL。

答案 1 :(得分:0)

所以只是确认一下,要在 express 中使用它,我应该这样做:

app.use(async function(req, res, next) {

  const prisma = new PrismaClient({
    datasources: {
      db: {
        url: "new db url goes here",
      },
    },
  });

  req.prisma = prisma;
  next();
});

而不是这个?:

const prisma = new PrismaClient();

app.use(async function(req, res, next) {
  req.prisma = prisma;
  next();
});
相关问题