Koajs-cascading
Koa.js-カスケード
ミドルウェア関数は、コンテキストオブジェクト*およびアプリケーションの要求/応答サイクルの次のミドルウェア関数にアクセスできる関数です。 これらの関数は、リクエストボディの解析、レスポンスヘッダーの追加などのタスクのリクエストおよびレスポンスオブジェクトを変更するために使用されます。 Koaはさらに一歩進んで *'downstream' を生成し、コントロールを 'upstream' に戻します。 この効果は「カスケード」と呼ばれます。
以下は、実行中のミドルウェア関数の簡単な例です。
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);
上記のミドルウェアは、サーバー上のすべての要求に対して呼び出されます。 したがって、すべてのリクエストの後に、コンソールに次のメッセージが表示されます。
A new request received at 1467267512545
特定のルート(およびそのすべてのサブルート)に制限するには、ルーティングで行ったようにルートを作成するだけです。 実際、これらのミドルウェアはリクエストを処理するだけです。
例えば、
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);
これで、 '/request’のサブルートを要求するたびに、時間を記録します。
ミドルウェア呼び出しの順序
Koaのミドルウェアに関する最も重要なことの1つは、ミドルウェアがファイルに書き込まれる/ファイルに含まれる順序が、ダウンストリームで実行される順序であることです。 ミドルウェアでyieldステートメントに到達するとすぐに、最後に到達するまで、次のミドルウェアに順番に切り替わります。 それから再び、yieldステートメントから関数の再開と再開を開始します。
たとえば、次のコードスニペットでは、最初の関数が最初にyieldまで実行され、次に2番目のミドルウェアがyieldまで実行され、次に3番目が実行されます。 ここにミドルウェアはもうないので、逆に、つまり3番目、2番目、1番目の順序で実行を開始します。 この例では、ミアウェアを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);
このコードを実行した後に「/」にアクセスすると、コンソールで次のようになります-
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.
次の図は、上記の例で実際に起こっていることを要約しています。
独自のミドルウェアの作成方法がわかったので、最も一般的に使用されるコミュニティ作成ミドルウェアのいくつかについて説明しましょう。
サードパーティのミドルウェア
Express用のサードパーティミドルウェアのリストはhttps://github.com/koajs/koa/wiki[here。]で入手できます。以下は、最も一般的に使用されるミドルウェアの一部です-
- コアボディパーサー
- コアルーター
- コアスタティック
- コア圧縮
後続の章で複数のミドルウェアについて説明します。