我在我的 Next.js 應用中使用 Prisma,但是我做錯了。

我在每個頁面都初始化了一個新的 PrismaClient 對象:

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

但是在應用使用一段時間後,我收到了錯誤訊息 Already 10 Prisma Clients are actively runningAddress already in use

為了解決這個問題,我將 Prisma 初始化的程式碼抽取到一個單獨的文件 lib/prisma.js 中:

import { PrismaClient } from '@prisma/client'

let prisma

if (process.env.NODE_ENV === 'production') {
  prisma = new PrismaClient()
} else {
  if (!global.prisma) {
    global.prisma = new PrismaClient()
  }
  prisma = global.prisma
}

export default prisma

進行生產環境的檢查是因為在開發模式下,npm run dev 會在運行時清除 Node.js 快取,這會導致因為熱重新加載而每次都初始化一個新的 PrismaClient,所以我們無法解決這個問題。

我從 https://www.prisma.io/docs/support/help-articles/nextjs-prisma-client-dev-practices 上取得了這段程式碼。

最後,我在我的頁面中導入了導出的 prisma 對象:

import prisma from 'lib/prisma'