仅实例化棱镜一次

问题描述

我目前在一个运行 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,然后将其导入到不同的文件中。

//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({})