Formazione di Express e Node.js da StrongLoop

Questa traduzione fornita da StrongLoop / IBM.

È possibile che questo documento non sia aggiornato poiché la documentazione è in inglese. Per gli ultimi aggiornamenti, fare riferimento alla documentazione in inglese.

Compilazione del middleware per l’utilizzo nelle applicazioni Express

Panoramica

Le funzioni middleware sono funzioni con accesso all’oggetto richiesta (req), all’oggetto risposta (res) e alla successiva funzione middleware nel ciclo richiesta-risposta dell’applicazione. La successiva funzione middleware viene comunemente denotata da una variabile denominata next.

Le funzioni middleware possono eseguire le attività elencate di seguito:

Se la funzione middleware corrente non termina il ciclo richiesta-risposta, deve richiamare next() per passare il controllo alla successiva funzione middleware. Altrimenti, la richiesta verrà lasciata in sospeso.

I seguenti esempi mostrano gli elementi di una chiamata alla funzione middleware:

Metodo HTTP per cui si applica la funzione middleware.
Percorso (route) per cui si applica la funzione middleware.
La funzione middleware.
Argomento di callback nella funzione middleware, denominata per convenzione "next".
Argomento risposta HTTP nella funzione middleware, denominato "res" per convenzione.
Argomento richiesta HTTP nella funzione middleware, denominato "req" per convenzione.

Ecco un esempio di una semplice applicazione Express “Hello World”, per cui si definiranno due funzioni middleware:


var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Sviluppo

Ecco un semplice esempio di una funzione middleware, denominata “myLogger”. Questa funzione stampa semplicemente la dicitura “LOGGED” quando una richiesta all’applicazione la attraversa. La funzione middleware è assegnata ad una variabile denominata myLogger.


var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

Si noti la chiamata precedente a next(). Richiamando questa funzione si richiama la successiva funzione middleware nell’applicazione. La funzione next() non fa parte dell’API Express o Node.js, ma è il terzo argomento trasmesso alla funzione middleware. La funzione next() potrebbe essere denominata in qualsiasi modo, ma per convenzione viene sempre denominata “next”. Per evitare confusione, utilizzare sempre questa convenzione.

Per caricare la funzione middleware, richiamare app.use(), specificando la funzione middleware. Ad esempio, il seguente codice carica la funzione middleware myLogger prima della route al percorso root (/).


var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Ogni volta che un’applicazione riceve una richiesta, viene stampato il messaggio “LOGGED” sul terminale.

L’ordine di caricamento del middleware è importante: le funzioni middleware che vengono caricate per prime vengono anche eseguite per prime.

Se myLogger viene caricato dopo la route sul percorso root, la richiesta non lo raggiunge mai e l’applicazione non stampa “LOGGED”, poiché l’handler di route del percorso root termina il ciclo richiesta-risposta.

La funzione middleware myLogger stampa semplicemente un messaggio, successivamente passa la richiesta alla successiva funzione middleware nello stack chiamando la funzione next().

Nel successivo esempio viene aggiunta una proprietà denominata requestTime all’oggetto richiesta. Questa funzione middleware verrà denominata “requestTime”.


var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

L’applicazione utilizza ora la funzione middleware requestTime. Inoltre, la funzione di callback della route percorso root utilizza la proprietà che la funzione middleware aggiunge a req (l’oggetto richiesta).


var express = require('express');
var app = express();

var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

app.use(requestTime);

app.get('/', function (req, res) {
  var responseText = 'Hello World!
'; responseText += 'Requested at: ' + req.requestTime + ''; res.send(responseText); }); app.listen(3000);

Quando si effettua una richiesta al root dell’applicazione, l’applicazione mostra la cronologia data e ora della richiesta nel browser.

Poiché si dispone dell’accesso all’oggetto richiesta, l’oggetto risposta, la successiva funzione middleware nello stack e l’API Node.js completo, le possibilità con le funzioni middleware sono infinite.

Per ulteriori informazioni sul middleware Express, consultare: Utilizzo del middleware Express.