仅实例化 prisma 一次

Ric*_*din 1 prisma prisma2

我目前在运行 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();
Run Code Online (Sandbox Code Playgroud)

然后跨过routes文件

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

// run queries...
db.SomeTable.create({})
Run Code Online (Sandbox Code Playgroud)

Pen*_*Liu 6

受@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;
Run Code Online (Sandbox Code Playgroud)

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

import prisma from '../lib/prisma';
Run Code Online (Sandbox Code Playgroud)