【问题标题】:Instantiate prisma only once仅实例化 prisma 一次
【发布时间】:2021-06-29 08:36:26
【问题描述】:

我目前在运行 postgres 的项目中使用 prisma 2.20.1。

在他们的文档中,他们说要导入 PrismaClient 并在整个应用程序中实例化它。

但是,来自其他用例,您只连接到数据库一次,在每条路线(我的项目结构设置为不同的文件和目录)、实例化和(再次连接到数据库? )。

我的意思是,有没有办法将数据库连接集中在一个文件中,并在整个应用程序中使用它的实例?这样做会安全吗?有什么后果吗?

我的想法是这样的:

// database.ts
import { PrismaClient } from '@prisma/client';

class Database {
    constructor() {
        this.db = new PrismaClient();
    }
}

const database = new Database();

export default new Database();

然后跨路由文件

// specificRouteFile.ts
import db from 'database';

// run queries...
db.SomeTable.create({})

【问题讨论】:

    标签: prisma prisma2


    【解决方案1】:

    @Mahmoud Abdelwahab 的启发,我创建了一个 TypeScript(实例化)版本:

    // lib/prisma.ts
    import { PrismaClient } from '@prisma/client';
    
    interface CustomNodeJsGlobal {
      prisma: PrismaClient;
    }
    
    declare const global: CustomNodeJsGlobal;
    
    const prisma = global.prisma || new PrismaClient();
    
    if (process.env.NODE_ENV === 'development') global.prisma = prisma;
    
    export default prisma;
    

    创建此文件后,您现在可以在任何地方导入此 PrismaClient 实例。您可以获取有关实例 PrismaClient here 的深入信息。

    import prisma from '../lib/prisma';
    

    【讨论】:

      【解决方案2】:

      您可以在一个文件中创建和初始化 Prisma,然后将其导入到不同的文件中。

      //lib/prisma.js
      import { PrismaClient } from "@prisma/client";
      
      const prisma = new PrismaClient();
      
      export default prisma;
      
      

      然后在不同的文件中,例如,只是做

      import prisma from "./lib/prisma"
      
      const posts = prisma.posts.findMany({})
      
      

      【讨论】:

      • 感谢您的回复。在这种方法中,是否会在每次导入时连接和断开与数据库的连接?
      猜你喜欢
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2014-02-08
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2019-05-28
      相关资源
      最近更新 更多