NextAuthを開発環境で使用していると、下記のエラーが発生し、クラッシュしてしまうことが多かった。
FATAL: sorry, too many clients already ... too many connections
開発環境で、単一の PrismaClient インスタンスを使用すること
@/lib/server/prismaClient.ts
に作成しています。
import { PrismaClient } from '@prisma/client' // 型定義 declare global { var prisma: PrismaClient | undefined } export const prisma = global.prisma || new PrismaClient({ log: ['query', 'info'], // 👈 ログ出力。消してOK! }) if (process.env.NODE_ENV !== 'production') global.prisma = prisma
global
は、おそらくNode.jsのグローバルオブジェクト
Global objects | Node.js v16.8.0 Documentation
[...nextauth].ts
import NextAuth from 'next-auth' import Providers from 'next-auth/providers' import { PrismaAdapter } from '@next-auth/prisma-adapter' import { prisma } from '@/lib/server/prismaClient' export default NextAuth({ providers: [ Providers.Google({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), ], adapter: PrismaAdapter(prisma), callbacks: { session: async (session, user) => { return Promise.resolve({ ...session, user: { ...session.user, id: user.id } }) } } })
API Routes
import { prisma } from '@/lib/server/prismaClient' await prisma.user.findUnique({...})
getServerSideProps
const { prisma } = require('@/lib/server/prismaClient') await prisma.user.findUnique({...})