我在我的 Next.js 應用中使用 Prisma,但是我做錯了。
我在每個頁面都初始化了一個新的 PrismaClient 對象:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
但是在應用使用一段時間後,我收到了錯誤訊息 Already 10 Prisma Clients are actively running
和 Address 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'