javascript / expert
Snippet
Isomorphes Singleton-Muster für Datenquellen
Im Next.js-Entwicklungsmodus kann Hot Module Replacement (HMR) mehrere Instanzen von Datenbankverbindungen verursachen. Das Anhängen der Instanz an 'globalThis' stellt ein Singleton-Muster sicher, das über Reloads hinweg bestehen bleibt und Erschöpfung der Verbindungen verhindert.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
const globalForDatabase = globalThis;export const db = globalForDatabase.db ?? (() => {const instance = new DatabaseConnection();if (process.env.NODE_ENV !== 'production') {globalForDatabase.db = instance;}return instance;})();// Usage in Next.js Server Componentsimport { db } from './db';
nextjs
Erklärung
1
const globalForDatabase = globalThis;
Referenziert den globalen Ausführungskontext, der während HMR in Node.js bestehen bleibt.
2
globalForDatabase.db ?? (() => { ... })();
Verwendet den Nullish Coalescing Operator, um entweder die bestehende Instanz abzurufen oder eine neue zu initialisieren.
3
if (process.env.NODE_ENV !== 'production')
Stellt sicher, dass die globale Belegung nur in der Entwicklung erfolgt, um die HMR-Stabilität zu unterstützen.