Koa.js - Cascading

Le funzioni middleware sono funzioni che hanno accesso a context objecte la successiva funzione middleware nel ciclo richiesta-risposta dell'applicazione. Queste funzioni vengono utilizzate per modificare gli oggetti richiesta e risposta per attività come l'analisi dei corpi delle richieste, l'aggiunta di intestazioni delle risposte, ecc.'downstream', quindi far scorrere indietro il controllo 'upstream'. Questo effetto è chiamatocascading.

Di seguito è riportato un semplice esempio di una funzione middleware in azione.

var koa = require('koa');
var app = koa();
var _ = router();

//Simple request time logger
app.use(function* (next) {
   console.log("A new request received at " + Date.now());
   
   //This function call is very important. It tells that more processing is 
   //required for the current request and is in the next middleware function/route handler.
   yield next;
});

app.listen(3000);

Il middleware di cui sopra viene chiamato per ogni richiesta sul server. Quindi, dopo ogni richiesta, riceveremo il seguente messaggio nella console.

A new request received at 1467267512545

Per restringerlo a una rotta specifica (e tutte le sue subroute), dobbiamo solo creare le rotte come abbiamo fatto per le rotte. In realtà sono solo questi middleware che gestiscono la nostra richiesta.

Per esempio,

var koa = require('koa');
var router = require('koa-router');
var app = koa();

var _ = router();

//Simple request time logger
_.get('/request/*', function* (next) {
   console.log("A new request received at " + Date.now());
   yield next;
});

app.use(_.routes());
app.listen(3000);

Ora, ogni volta che richiedi una sottotraccia di "/ request", solo allora registrerà l'ora.

Ordine delle chiamate middleware

Una delle cose più importanti del middleware in Koa è che l'ordine in cui sono scritti / inclusi nel file, è l'ordine in cui vengono eseguiti a valle. Non appena raggiungiamo una dichiarazione di rendimento in un middleware, passa al middleware successivo in linea, fino a raggiungere l'ultimo. Poi di nuovo iniziamo a tornare indietro e riprendere le funzioni dalle istruzioni yield.

Ad esempio, nel seguente frammento di codice, la prima funzione viene eseguita prima fino a resa, poi il secondo middleware fino a resa, quindi la terza. Poiché qui non abbiamo più middleware, iniziamo a tornare indietro, eseguendo in ordine inverso, ovvero terzo, secondo, primo. Questo esempio riassume come utilizzare il middleware in modo Koa.

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

//Order of middlewares
app.use(first);
app.use(second);
app.use(third);

function *first(next) {
   console.log("I'll be logged first. ");
   
   //Now we yield to the next middleware
   yield next;
   
   //We'll come back here at the end after all other middlewares have ended
   console.log("I'll be logged last. ");
};

function *second(next) {
   console.log("I'll be logged second. ");
   yield next;
   console.log("I'll be logged fifth. ");
};

function *third(next) {
   console.log("I'll be logged third. ");
   yield next;
   console.log("I'll be logged fourth. ");
};

app.listen(3000);

Quando visitiamo "/" dopo aver eseguito questo codice, sulla nostra console otterremo:

I'll be logged first. 
I'll be logged second. 
I'll be logged third. 
I'll be logged fourth. 
I'll be logged fifth. 
I'll be logged last.

Il diagramma seguente riassume ciò che sta realmente accadendo nell'esempio precedente.

Ora che sappiamo come creare il nostro middleware, parliamo di alcuni dei middleware creati dalla comunità più comunemente usati.

Middleware di terze parti

Un elenco di middleware di terze parti per Express è disponibile qui. Di seguito sono riportati alcuni dei middleware più comunemente utilizzati:

  • koa-bodyparser
  • koa-router
  • koa-static
  • koa-compress

Discuteremo di più middleware nei capitoli successivi.