Crea un server Express 5 passo dopo passo: route, middleware, body JSON, file statici e un gestore degli errori, più un generatore di server iniziale e le modifiche da v4 a v5.
Express è un piccolo framework web per Node.js. Installalo con npm install express, crea un'app con express(), aggiungi route come app.get('/', handler) e avviala con app.listen(3000). I middleware come express.json() vengono eseguiti prima delle tue route, e un gestore degli errori con quattro argomenti va per ultimo.
La maggior parte dei tutorial su Express mostra ancora codice della versione 4 che si rompe o genera avvisi con la versione 5, che ora è quella installata per impostazione predefinita. Questa guida usa Express 5 dall'inizio alla fine, genera un server iniziale con le parti che spunti, e si chiude con una tabella delle modifiche che mettono in difficoltà chi aggiorna un progetto più vecchio.
Spunta nel generatore le funzionalità che vuoi: body JSON, file statici, un router, una pagina 404 e un gestore degli errori.
Scegli ES modules o CommonJS in base al tuo package.json.
Copia il file in index.js, esegui npm install express, poi node index.js.
Leggi le sezioni qui sotto per capire cosa fa ogni parte e in cosa la versione 5 differisce dalla 4.
L'ordine conta: Express esegue middleware e route nell'ordine in cui li registri, quindi i parser del body vanno per primi e il gestore degli errori per ultimo.
In Express 5 una route async che lancia un'eccezione o viene rifiutata passa automaticamente al tuo gestore degli errori. Non serve più un wrapper attorno a ogni funzione async.
Usa path.join(__dirname, 'public') o un percorso assoluto per i file statici, così il server funziona da qualunque cartella lo avvii.
Imposta NODE_ENV=production in produzione. Il gestore degli errori integrato smette così di inviare stack trace ai visitatori.
Domande frequenti
Quale versione di Node.js richiede Express 5?
Express 5 richiede Node.js 18 o successivo. Se sei bloccato su un Node più vecchio, resta su Express 4 finché non puoi aggiornare il runtime.
Perché req.body è undefined?
Nessun parser del body è stato eseguito per quella richiesta. Aggiungi app.use(express.json()) per il JSON o express.urlencoded() per l'invio di moduli prima delle tue route, e assicurati che il client invii un header Content-Type corrispondente. In Express 5 un body non analizzato è undefined invece di un oggetto vuoto.
Come scrivo una route catch-all in Express 5?
Ora i wildcard devono avere un nome. Usa app.get('/*splat', handler) invece di '/*'. Per includere anche il percorso radice, racchiudilo tra graffe: '/{*splat}'.
Cosa fa next()?
Passa la richiesta al middleware o alla route successiva che corrisponde. Chiama next() per continuare, next(err) per saltare ai gestori degli errori, oppure invia una risposta per fermare la catena. Dimenticare entrambe le cose lascia la richiesta in sospeso.
Dovrei usare ancora body-parser?
Non per JSON e dati dei moduli. express.json() ed express.urlencoded() sono integrati. Nota che in Express 5 l'opzione extended del parser urlencoded vale false per impostazione predefinita.
Route e parametri
Una route è un metodo, un percorso e un handler. I segmenti con nome come :id si leggono da req.params, le query string da req.query e il body analizzato da req.body.
Rispondi con res.json() per i dati, res.send() per testo o HTML, e res.status(404) concatenato prima di uno dei due per impostare il codice. Express 5 accetta in res.status() solo numeri interi da 100 a 999.
I middleware in un paragrafo
Un middleware è una funzione di req, res e next che viene eseguita prima dell'handler della route. Può leggere o modificare la richiesta, terminare la risposta o chiamare next(). Logging, controlli di autenticazione, header CORS e parsing del body sono tutti middleware, montati con app.use() per ogni percorso o passati a una singola route.
Configurare un progetto
Installare ed eseguire
Crea una cartella, inizializza package.json, contrassegnalo come progetto ES module e installa Express.
Route in un file a parte
Un router è una mini app. Montalo sotto un prefisso così ogni percorso al suo interno è relativo a esso.
Gli errori async arrivano al gestore degli errori
In Express 5 una promise rifiutata in una route viene inoltrata per te. L'handler a quattro argomenti, registrato per ultimo, la trasforma in una risposta.
Da Express 4 a 5: cosa è cambiato
Express fornisce codemod per molti di questi casi: npx codemod@latest @expressjs/v5-migration-recipe.