Express: il pattern middleware spiegato
Una catena di funzioni
Il cuore di Express e il concetto di middleware: funzioni che ricevono la richiesta, la risposta e una funzione next. Ogni middleware puo leggere o modificare la richiesta, terminarla o passarla al successivo, formando una catena che elabora ogni chiamata.
La firma del middleware
Un middleware ha sempre la stessa struttura. Chiamare next() passa il controllo al prossimo anello; non chiamarlo significa interrompere la catena (ad esempio inviando una risposta).
function logger(req, res, next) {
console.log(`${req.method} ${req.url}`);
next();
}
app.use(logger);
Casi d'uso tipici
I middleware si usano per le esigenze trasversali a tutte le rotte:
- Logging delle richieste in ingresso.
- Autenticazione e verifica dei permessi.
- Parsing del corpo della richiesta (
express.json()). - Gestione degli errori centralizzata.
Il middleware di errore
Un middleware con quattro parametri viene riconosciuto da Express come gestore degli errori. Registrandolo per ultimo, intercetta tutto cio che gli step precedenti passano con next(err).
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ errore: "Errore interno" });
});
L'ordine di registrazione e tutto: i middleware vengono eseguiti nella sequenza in cui sono dichiarati. In MUSTNODE SRL sfruttiamo questo pattern per mantenere le API Express ordinate, con logica di autenticazione, logging ed errori isolata e riutilizzabile.
Articoli correlati
Altri approfondimenti dalla categoria Backend & Java.
Node.js Streams per gestire grandi volumi di dati
Come usare gli stream di Node.js per elaborare file e flussi di dati di grandi dimensioni senza saturare la memoria.
Java moderno: record, sealed e pattern matching
Le novita del Java recente che rendono il codice piu conciso ed espressivo: record, classi sealed e pattern matching su switch.
Costruire API REST con Spring Boot
Dai controller alla validazione, dalla gestione degli errori alla documentazione: come strutturiamo API REST solide con Spring Boot.