Cosa sono i Middleware di Express.js?
Esempi di come funzionano e come usarli

Tempo di lettura: 3 minuti
Middleware su Expres.js, guida su come usarli

Nei precedenti tutorial di questo piccolo manuale su Express, abbiamo visto due delle caratteristiche essenziali di Express:

  1. Rotte (routing): consentono una gestione efficiente degli URL.
  2. Viste (views): consentono l’ accesso a template engine come EJS.

Tutto questo si rivelerà molto utile durante la creazione di un sito o un API e potresti essere tentato di non approfondire oltre… lascia che ti dica una cosa:

Questo significherebbe ignorare il cuore di Express!

Ti consiglio di continuare ad approfondire il framework, e in questo articolo ti spiegherò i Middleware, ovvero come funziona il cuore di Express.

Express e i middleware

Express è un framework basato sul concetto di middleware, puoi immaginarteli come dei “moduli“, ognuno dei quali fornisce una caratteristica specifica.

Ovviamente, dal codice possiamo decidere quali middleware caricare.

Express include,  di base, oltre 15 pezzetti del middleware, e naturalmente gli sviluppatori possono aggiungerne altri tramite l’NPM. Ogni pezzetto fornisce una micro caratteristica.

Ecco alcuni esempi:

  • compression: consente la compressione gzip delle pagine per un invio più veloce al client.
  • cookie-parser: consente di lavorare con i cookie.
  • cookie-session: consente di generare informazioni sulla sessione (durante il periodo di permanenza del visitatore sul sito web).
  • server-static: permette di restituire file statici contenuti in una cartella (immagini, file da scaricare, ecc.).
  • serve-favicon: gestisce il favicon del tuo sito web.
  • csrf: protegge dai guasti CSRF.
  • ecc

Tutti questi middleware offrono micro caratteristiche: alcuni di loro sono davvero piccoli, come ad esempio “serve-favicon“.

Questi pezzetti di middleware sono interconnessi tra loro e comunicano l’un l’altro.

Express si preoccupa di aggiungere il sistema di outing e dei template engine al di sopra del sistema del middleware.

Ogni pezzo del middleware invia 4 parametri al pezzo successivo:

  1. err: eventuali errori.
  2. req: i dati della richiesta del visitatore.
  3. res: la risposta da restituire (solitamente l’HTML della pagina e le informazione dell’header).
  4. next: la callback per la funzione successiva da chiamare.

Per riassumerne il funzionamento ho preparato questo grafico:

cos-e-middleware-expressjs-come-funziona-comunica
Come i vari middleware comunicano tra di loro

Inizialmente il middleware di Express era un modulo esterno chiamato Connect, ora invece fa parte integrante del framework.

Sentiti libero di leggere la documentazione disponibile sul middleware e su Express. Ti darà tutte le informazioni necessarie per utilizzare il middleware.

Come usare i middleware in Express

Per usare un middleware, tutto quello che devi fare è chiamare il metodo app.use().

Puoi farlo cosi:

var express = require('express');
var morgan = require('morgan'); // carichiamo un middleware per i log sul server
var favicon = require('serve-favicon'); // carichiamo il middleware per la favicon

var app = express();

app.use(morgan('combined')) // Usiamo il middleware per i log
.use(express.static(__dirname + '/public')) // Specifichiamo la cartella contente i file statici (attivando uno dei middleware di base)
.use(favicon(__dirname + '/public/favicon.ico')) // Attiviamo una specifica favicon
.use(function(req, res){ // Definiamo la risposta per il client
  res.send('Hello');
});

app.listen(8080);

Inutile che che ti dico che prima di poter eseguire questo codice, devi installare tramite l’NPM i middleware di cui fai il require().

L’ordine di chiamata per il middleware è estremamente importante. Per esempio, iniziamo attivando a registrare i log.

Se lo facessimo durare, non saremmo in grado di registrare nulla!

Quando richiami un middleware pensa all’ordine, perché può avere un grande impatto sul funzionamento della tua app.

Come puoi vedere, ho usato il middleware “morgan“,”static” (alias per server-static), e “favicon” . Ogni elemento del middleware restituirà i dati a se stesso (la richiesta, la risposta, la funzione successiva da chiamare, ecc.) e ciascuno svolge un ruolo specifico. Per sapere come utilizzarli ti basta leggere le documentazioni di ciascuno.

Potrei dilungarmi a spiegarti i middleware uno per uno, ma sarebbe lungo e noioso (sia per me che per te!). Quindi non voglio entrare nel dettaglio, ma penso che tu abbia le informazioni essenziali, le più complicate da capire da soli.

In poche parole: Express offre una vasta gamma di middleware che interagiscono tra loro. Esamina questi elementi del middleware per utilizzare le loro funzioni e fai attenzione in quale ordine li chiami perché è importante (es. non vuoi attivare un logger alla fine delle operazioni!).

Sei pronto ad affrontare il terribile e affascinante mondo di Express, un framework in rapida evoluzione.

Ben fatto, ti lascio alla lettura delle varie documentazioni!

Conclusione: Cose da sapere sui Middleware di Express.js

  • Express.js è un micro-framework per Node.js. Con Nodei compiti più comuni diventano fastidiosi da gestire, con Express vengono semplificati notevolmente.
  • Express permette specificamente la gestione delle rotte o percorsi (i diversi URL accettati dall’applicazione).
  • Express fornisce una vasta scelta tra i template engine (come EJS). Questi ci permettono di separare il codice Javascript (backend) dal codice HTML (frontend). Questo rappresenta la fine per le chiamate write().
  • Express si basa sul concetto di middleware, che sono dei mini-strati dell’app che offrono funzionalità specifiche (come sessioni, compressione pagina gzip, gestione cookie, ecc.).

L’articolo che hai appena letto fa parte di una lunga serie di guide e tutorial tradotte in italiano e distribuite gratuitamente. In particolare questo articolo si basa sui testi inglesi di Mathieu Nebra (Ultra fast applications using Node.js), con licenza CC BY-NC-SA. Questo articolo è sotto la stessa licenza.