Node.js: middleware e route in ExpressJS

Node.js: middleware e route in ExpressJS

In ExpressJS un middleware ha un rapporto ben definito con le route.

La regola principale che viene seguita solitamente è quella di aggiungere metodi e proprietà agli oggetti che rappresentano una richiesta ed una risposta di una route, ossia request (solitamente abbreviato in req) e response (solitamente abbreviato in res).

Dato che l'istanza dell'applicativo viene caricata in memoria quando si esegue il file tramite il comando node, tutto quello che un middleware aggiunge sarà disponibile per tutto il ciclo di vita dell'applicazione. E dato che i metodi e le proprietà vengono aggiunti prima della definizione delle singole route, tali metodi e proprietà saranno condivisi da tutte le route, poiché tutte le route possono usare gli oggetti req e res.

Abbiamo detto che un middleware viene definito a livello globale rispetto all'applicazione ma, cosa fondamentale, prima delle route. Questo significa che le route hanno accesso ai metodi ed alle proprietà definiti dal middleware, ma il middleware non ha accesso a tutte le proprietà create all'interno delle route. Un tipico esempio è req.body. La proprietà body è un oggetto che viene popolato quando si effettua una richiesta POST (solitamente).

Le sue proprietà avranno i nomi dei parametri POST inviati e i valori di tali proprietà saranno appunto i valori di tali parametri. Quindi se abbiamo un form con un campo con il valore email per l'attributo HTML name, accederemo al suo valore tramite req.body.email. Un middleware, tuttavia, spesso agisce prima della richiesta POST, quindi non ha accesso a tali proprietà.

Anche i middleware che gestiscono una richiesta (come quelli per l'upload dei file), pur inglobando l'oggetto richiesta, non possono agire prima che venga effettuata tale richiesta. In ExpressJS una richiesta (GET, POST, ecc.) è un'azione che porta alla creazione di oggetti e proprietà che in precedenza non erano inizializzati.

In pratica un middleware gestisce la fase di pre-routing in un'applicazione in ExpressJS, ossia, come vuole il suo nome, svolge la funzione di tramite tra il livello globale di un'app e le sue route.

Torna su