Bouw stap voor stap een Express 5-server: routes, middleware, JSON-bodies, statische bestanden en een error handler, plus een startgenerator en de wijzigingen van v4 naar v5.
Express is een klein webframework voor Node.js. Installeer het met npm install express, maak een app met express(), voeg routes toe zoals app.get('/', handler), en start hem met app.listen(3000). Middleware zoals express.json() draait vóór uw routes, en een error handler met vier argumenten komt als laatste.
De meeste Express-tutorials tonen nog code voor versie 4 die op versie 5, inmiddels de standaardinstallatie, breekt of waarschuwingen geeft. Deze uitleg gebruikt overal Express 5, genereert een startserver met de onderdelen die u aanvinkt, en eindigt met een tabel van de wijzigingen waar mensen over struikelen bij het upgraden van een ouder project.
Vink in de generator de functies aan die u wilt: JSON-bodies, statische bestanden, een router, een 404-pagina en een error handler.
Kies ES modules of CommonJS, passend bij uw package.json.
Kopieer het bestand naar index.js, voer npm install express uit en daarna node index.js.
Lees de secties hieronder voor wat elk onderdeel doet en hoe versie 5 verschilt van 4.
Volgorde telt: Express voert middleware en routes uit in de volgorde waarin u ze registreert, dus body parsers komen eerst en de error handler als laatste.
In Express 5 wordt een async route die een fout gooit of een afgewezen promise geeft automatisch doorgegeven aan uw error handler. U hebt geen wrapper meer nodig rond elke async functie.
Gebruik path.join(__dirname, 'public') of een absoluut pad voor statische bestanden, zodat de server werkt vanuit welke map u hem ook start.
Stel NODE_ENV=production in op productie. De ingebouwde error handler stuurt dan geen stack traces meer naar bezoekers.
Veelgestelde vragen
Welke Node.js-versie heeft Express 5 nodig?
Express 5 vereist Node.js 18 of nieuwer. Als u vastzit aan een oudere Node, blijf dan op Express 4 totdat u de runtime kunt upgraden.
Waarom is req.body undefined?
Er is voor dat verzoek geen body parser uitgevoerd. Voeg vóór uw routes app.use(express.json()) toe voor JSON of express.urlencoded() voor formulierposts, en zorg dat de client een passende Content-Type-header stuurt. In Express 5 is een niet-geparste body undefined in plaats van een leeg object.
Hoe schrijf ik een catch-all route in Express 5?
Wildcards moeten nu een naam hebben. Gebruik app.get('/*splat', handler) in plaats van '/*'. Om ook het rootpad te matchen, zet u het tussen accolades: '/{*splat}'.
Wat doet next()?
Het geeft het verzoek door aan de volgende passende middleware of route. Roep next() aan om door te gaan, next(err) om naar de error handlers te springen, of stuur een antwoord om de keten te stoppen. Als u beide vergeet, blijft het verzoek hangen.
Moet ik nog body-parser gebruiken?
Niet voor JSON en formulierdata. express.json() en express.urlencoded() zijn ingebouwd. Let op: in Express 5 staat de optie extended van de urlencoded parser standaard op false.
Routes en parameters
Een route bestaat uit een methode, een pad en een handler. Benoemde segmenten zoals :id leest u uit req.params, querystrings uit req.query, en de geparste body uit req.body.
Antwoord met res.json() voor data, res.send() voor tekst of HTML, en zet res.status(404) ervoor om de code in te stellen. Express 5 accepteert in res.status() alleen gehele getallen van 100 tot 999.
Middleware in één alinea
Middleware is een functie van req, res en next die vóór de route handler draait. Ze kan het verzoek lezen of wijzigen, het antwoord afronden of next() aanroepen. Logging, authenticatiecontroles, CORS-headers en body parsing zijn allemaal middleware, gekoppeld met app.use() voor elk pad of meegegeven aan één route.
Een project opzetten
Installeren en starten
Maak een map, initialiseer package.json, markeer het als ES module-project en installeer Express.
Routes in een eigen bestand
Een router is een mini-app. Koppel hem onder een prefix, zodat elk pad erin relatief daaraan is.
Async fouten bereiken de error handler
In Express 5 wordt een afgewezen promise in een route voor u doorgestuurd. De handler met vier argumenten, als laatste geregistreerd, maakt er een antwoord van.
Van Express 4 naar 5: wat is er veranderd
Express levert codemods voor veel hiervan: npx codemod@latest @expressjs/v5-migration-recipe.