Koa.js - kaskadowanie

Funkcje oprogramowania pośredniczącego to funkcje, które mają dostęp do context objectoraz kolejna funkcja oprogramowania pośredniego w cyklu żądanie-odpowiedź aplikacji. Funkcje te służą do modyfikowania obiektów żądań i odpowiedzi dla zadań, takich jak analizowanie treści żądań, dodawanie nagłówków odpowiedzi itp. Koa idzie o krok dalej, dając'downstream', a następnie przekazanie sterowania z powrotem 'upstream'. Ten efekt nazywa sięcascading.

Poniżej znajduje się prosty przykład działania funkcji oprogramowania pośredniego.

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);

Powyższe oprogramowanie pośredniczące jest wywoływane dla każdego żądania na serwerze. Dlatego po każdym żądaniu w konsoli otrzymamy następujący komunikat.

A new request received at 1467267512545

Aby ograniczyć to do określonej trasy (i wszystkich jej podtrasów), musimy po prostu utworzyć trasy, tak jak zrobiliśmy to w przypadku routingu. Właściwie to tylko te oprogramowanie pośredniczące obsługuje nasze żądanie.

Na przykład,

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);

Teraz za każdym razem, gdy zażądasz jakiejś podtrasy „/ request”, tylko wtedy zapisze czas.

Kolejność wywołań oprogramowania pośredniego

Jedną z najważniejszych rzeczy związanych z oprogramowaniem pośredniczącym w Koa jest to, że kolejność, w jakiej są zapisywane / umieszczane w pliku, to kolejność, w jakiej są wykonywane w dół. Gdy tylko trafimy na deklarację zysku w oprogramowaniu pośrednim, przełącza się ono na następne oprogramowanie pośrednie w linii, aż dotrzemy do ostatniego. Potem znowu zaczynamy cofać się i wznawiać funkcje z instrukcji yield.

Na przykład w poniższym fragmencie kodu pierwsza funkcja jest wykonywana najpierw do uzyskania zysku, następnie do drugiego oprogramowania pośredniczącego do uzyskania, a następnie do trzeciej. Ponieważ nie mamy już tutaj oprogramowania pośredniego, zaczynamy cofać się, wykonując w odwrotnej kolejności, tj. Trzeci, drugi, pierwszy. W tym przykładzie podsumowano, jak używać oprogramowania pośredniczącego na sposób 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);

Kiedy odwiedzimy '/' po uruchomieniu tego kodu, na naszej konsoli otrzymamy -

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.

Poniższy diagram podsumowuje, co faktycznie dzieje się w powyższym przykładzie.

Teraz, gdy wiemy, jak stworzyć własne oprogramowanie pośredniczące, omówmy niektóre z najczęściej używanych programów pośredniczących tworzonych przez społeczność.

Oprogramowanie pośredniczące innych firm

Lista oprogramowania pośredniego innych firm do obsługi ekspresowej jest dostępna tutaj. Poniżej przedstawiono niektóre z najczęściej używanych programów pośredniczących -

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

W kolejnych rozdziałach omówimy wiele programów pośredniczących.