Wie implementiere ich in Node.js eine Middleware richtig?
- Einführung in Middleware
- Grundstruktur einer Middleware-Funktion
- Wichtige Punkte bei der Implementierung
- Beispiel für eine einfache Logging-Middleware
- Middleware in Express einbinden
- Middleware mit Fehlerbehandlung
- Zusammenfassung
Einführung in Middleware
Eine Middleware in Node.js, besonders im Zusammenhang mit Frameworks wie Express, ist eine Funktion, die Zugriff auf das Request-Objekt (req), das Response-Objekt (res) und die nächste Middleware-Funktion im Anwendungszyklus hat. Middleware wird verwendet, um wiederkehrende Aufgaben zu automatisieren, wie z. B. Logging, Autorisierung oder das Parsen von Request-Daten, bevor die eigentliche Geschäftslogik ausgeführt wird.
Grundstruktur einer Middleware-Funktion
Eine Middleware-Funktion hat typischerweise folgende Signatur:
function middlewareName(req, res, next) { // Middleware-Logik next();}Die Parameter req und res sind die herkömmlichen Request- und Response-Objekte von Node.js bzw. Express. Der dritte Parameter next ist eine Funktion, die aufgerufen wird, um die Ausführung an die nächste Middleware im Stack weiterzugeben.
Wichtige Punkte bei der Implementierung
Beim Schreiben einer Middleware ist es entscheidend, dass Sie next() aufrufen, außer Sie möchten die Kette bewusst stoppen und eine Antwort senden. Wird next() nicht aufgerufen, hängt die Anfrage und es kommt zu einem Time-out, da die Kontrolle nicht weitergegeben wird.
Innerhalb der Middleware können Sie beliebige Aktionen durchführen, wie z. B. das Verändern von req, Logging, Überprüfen von Authentifizierungsinformationen oder das Setzen von Headern.
Beispiel für eine einfache Logging-Middleware
function logger(req, res, next) { console.log(` ${req.method} ${req.url} - ${new Date().toISOString()}`); next();}
Diese Middleware loggt einfach die HTTP-Methode und URL sowie den aktuellen Zeitstempel. Anschließend wird auf next() aufgerufen, damit die Anfrage weiterverarbeitet wird.
Middleware in Express einbinden
Nachdem Sie eine Middleware-Funktion definiert haben, binden Sie diese in Ihre Express-Anwendung ein, entweder global für alle Routen oder spezifisch für bestimmte Pfade.
Global für alle Requests:
const express = require(express);const app = express();app.use(logger); // logger ist die Middleware aus dem Beispiel obenapp.get(/, (req, res) => { res.send(Hallo Welt!);});app.listen(3000, () => { console.log(Server läuft auf Port 3000);});Auch ist es möglich, Middleware nur auf bestimmten Routen oder Gruppierungen einzusetzen, indem Sie diese als zweiten Parameter in app.get, app.post etc. mitgeben.
Middleware mit Fehlerbehandlung
Eine spezielle Form der Middleware in Express ist die Fehler-Middleware, die vier Parameter verwendet (err, req, res, next). Diese Middleware fängt alle Fehler ab, die irgendwo in anderen Middleware-Funktionen oder Routen passieren.
function errorHandler(err, req, res, next) { console.error(err.stack); res.status(500).send(Etwas ist schief gelaufen!);}app.use(errorHandler);Diese Middleware muss als letzte Middleware in die Kette eingereiht werden, damit sie Fehler auffangen kann.
Zusammenfassung
Die richtige Implementierung einer Middleware in Node.js (mit Express) erfordert, dass Sie eine Funktion mit den Parametern req, res und next schreiben. Darin führen Sie Ihre gewünschten Aktionen durch und rufen anschließend next() auf, um die Verarbeitung fortzusetzen. Middleware wird als Bestandteil eines Middleware-Stacks oder auf bestimmten Routen in die Express-Anwendung eingebunden. Für Fehlerbehandlung verwenden Sie Middleware mit vier Parametern, um zentral auf Fehler reagieren zu können.
Behalten Sie stets im Hinterkopf, niemals res.send, res.end oder res.json aufzurufen, ohne danach next() aufzurufen oder den Middleware-Stack zu beenden, da sonst die Anfrage blockiert oder doppelt beantwortet wird.
