0 Tage Serie
javascript / intermediate
Snippet

Das Singleton-Muster für Datenbankverbindungen

In der Entwicklung lädt Next.js Module häufig neu. Ohne das Singleton-Muster würde jeder Hot-Reload eine neue Datenbankverbindung erstellen und schließlich den Pool erschöpfen. Dieses Muster speichert die Instanz global.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
import { PrismaClient } from '@prisma/client';
const prismaClientSingleton = () => new PrismaClient();
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
const prisma = globalForPrisma.prisma ??= prismaClientSingleton();
export default prisma;
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
nextjs
Erklärung
1
globalThis
Ein Standardweg, um in verschiedenen Umgebungen (Node.js/Browser) auf den globalen Scope zuzugreifen.
2
??=
Der logische Nullish-Zuweisungsoperator, der nur zuweist, wenn die Variable null oder undefined ist.