Baue Schritt für Schritt einen Express-5-Server: Routen, Middleware, JSON-Bodys, statische Dateien und ein Error Handler, dazu ein Starter-Generator und die Änderungen von v4 zu v5.
Express ist ein kleines Web-Framework für Node.js. Installiere es mit npm install express, erstelle eine App mit express(), füge Routen wie app.get('/', handler) hinzu und starte sie mit app.listen(3000). Middleware wie express.json() läuft vor deinen Routen, und ein Error Handler mit vier Argumenten kommt ans Ende.
Die meisten Express-Tutorials zeigen noch Code für Version 4, der unter Version 5, inzwischen die Standardinstallation, bricht oder Warnungen ausgibt. Diese Anleitung nutzt durchgehend Express 5, erzeugt einen Starter-Server mit den Teilen, die du anhakst, und endet mit einer Tabelle der Änderungen, über die Leute beim Upgrade eines älteren Projekts stolpern.
Hake im Generator die gewünschten Funktionen an: JSON-Bodys, statische Dateien, einen Router, eine 404-Seite und einen Error Handler.
Wähle ES-Module oder CommonJS, passend zu deiner package.json.
Kopiere die Datei nach index.js, führe npm install express aus und dann node index.js.
Lies die Abschnitte unten, um zu erfahren, was jedes Teil macht und wie sich Version 5 von 4 unterscheidet.
Die Reihenfolge zählt: Express führt Middleware und Routen in der Reihenfolge aus, in der du sie registrierst, Body-Parser kommen also zuerst und der Error Handler zuletzt.
In Express 5 wird eine asynchrone Route, die einen Fehler wirft oder rejected, automatisch an deinen Error Handler übergeben. Du brauchst keinen Wrapper mehr um jede async-Funktion.
Nutze für statische Dateien path.join(__dirname, 'public') oder einen absoluten Pfad, damit der Server funktioniert, egal aus welchem Ordner du ihn startest.
Setze in Produktion NODE_ENV=production. Der eingebaute Error Handler schickt Besuchern dann keine Stack Traces mehr.
Häufige Fragen
Welche Node.js-Version braucht Express 5?
Express 5 erfordert Node.js 18 oder neuer. Wenn du auf einer älteren Node-Version festsitzt, bleib bei Express 4, bis du die Laufzeitumgebung aktualisieren kannst.
Warum ist req.body undefined?
Für diese Anfrage lief kein Body-Parser. Füge vor deinen Routen app.use(express.json()) für JSON oder express.urlencoded() für Formulardaten hinzu und stell sicher, dass der Client einen passenden Content-Type-Header sendet. In Express 5 ist ein nicht geparster Body undefined statt eines leeren Objekts.
Wie schreibe ich in Express 5 eine Catch-all-Route?
Wildcards müssen jetzt benannt werden. Nutze app.get('/*splat', handler) statt '/*'. Um auch den Root-Pfad zu treffen, setze ihn in geschweifte Klammern: '/{*splat}'.
Was macht next()?
Es übergibt die Anfrage an die nächste passende Middleware oder Route. Rufe next() auf, um fortzufahren, next(err), um zu den Error Handlern zu springen, oder sende eine Antwort, um die Kette zu beenden. Wenn du beides vergisst, hängt die Anfrage.
Sollte ich noch body-parser verwenden?
Nicht für JSON und Formulardaten. express.json() und express.urlencoded() sind eingebaut. Beachte, dass in Express 5 die Option extended des urlencoded-Parsers standardmäßig false ist.
Routen und Parameter
Eine Route besteht aus einer Methode, einem Pfad und einem Handler. Benannte Segmente wie :id liest du aus req.params, Query-Strings aus req.query und den geparsten Body aus req.body.
Antworte mit res.json() für Daten, res.send() für Text oder HTML und setze res.status(404) davor, um den Code festzulegen. Express 5 akzeptiert in res.status() nur ganze Zahlen von 100 bis 999.
Middleware in einem Absatz
Middleware ist eine Funktion von req, res und next, die vor dem Route-Handler läuft. Sie kann die Anfrage lesen oder ändern, die Antwort beenden oder next() aufrufen. Logging, Auth-Prüfungen, CORS-Header und Body-Parsing sind alles Middleware, eingebunden mit app.use() für jeden Pfad oder an eine einzelne Route übergeben.
Ein Projekt einrichten
Installieren und starten
Erstelle einen Ordner, initialisiere package.json, markiere es als ES-Modul-Projekt und installiere Express.
Routen in einer eigenen Datei
Ein Router ist eine Mini-App. Binde ihn unter einem Präfix ein, damit jeder Pfad darin relativ dazu ist.
Asynchrone Fehler erreichen den Error Handler
In Express 5 wird ein abgelehntes Promise in einer Route für dich weitergereicht. Der Handler mit vier Argumenten, zuletzt registriert, macht daraus eine Antwort.
Express 4 zu 5: was sich geändert hat
Express liefert für viele davon Codemods mit: npx codemod@latest @expressjs/v5-migration-recipe.