Next.js 集成 Prisma

Prisma 对 Next.js 有很好的支持,直接通过 Prisma 提供初始化方法执行即可使用,比起其他 ORM ,配置简单,易于使用。

https://www.prisma.io/nextjs

导出 prisma 实例

https://www.prisma.io/docs/orm/more/help-and-troubleshooting/help-articles/nextjs-prisma-client-dev-practices

在开发中,next dev 会在运行时清除 Node.js 缓存,会重新初始化新的 PrismaClient 实例,这可能会很快耗尽数据库连接,因为每个 PrismaClient 实例都拥有自己的连接池。

解决方案是实例化单个实例 PrismaClient 并将其保存在 globalThis 对象上:

import { PrismaClient } from '@prisma/client'

const prismaClientSingleton = () => {
  return new PrismaClient().$extends({
    result: {
      user: {
        fullName: {
          needs: { firstName: true, lastName: true },
          compute(user) {
            return `${user.firstName} ${user.lastName}`
          },
        },
      },
    },
  })
}

使用

直接导出 prisma 示例即可使用:

import prisma from '@/utils/prisma';

export async function getPost(id: number) {
  let data = await prisma.post.findUnique({
    where: {
      id,
    },
    include: {
      collections: {
        include: {
          collection: true,
        },
      },
    },
  });

  return data;
}
本文收录于专栏
使用 Next.js 搭建 SSR 全栈 demo ,以及构建 SSG 纯静态博客,记录学习和使用笔记