koa2プロジェクトの作成
まず、ディレクトリ作成hello-koa
VSコードのようにオープンし、プロジェクトディレクトリを。その後、我々は作成しapp.js
、次のコードを入力します。
// インポートKOA、KOA 1.xおよびkoa2で異なるが、我々はクラスを導入し、従って大文字興亜に示されている: CONST =興亜は、(「koa2」が必要); //は、オブジェクトを作成ウェブアプリケーション自体興亜を表します: CONSTアプリ= 新しい新しい興亜は(); // すべての要求のために、処理要求アプリ非同期関数呼び出し: app.use(非同期(CTX、NEXT)=> { 待つ次に(); ctx.response.type =「テキスト/ HTML ' ; ctx.response.bodyは ='こんにちは、koa2 <の/ H1> <H1の> '!; }); // ポートモニタ3000: app.listen(3000 ); はconsole.log( 'ポートでのAPPを開始3000 ... ' ); //はhttp://127.0.0.1:3000にアクセスすることができます
HTTPリクエストごとに、KOAは、着信非同期に処理するために私たちの関数を呼び出します:
非同期(CTX、NEXT)=> { ;待つ次に() // コンテンツのタイプ応答設定: ctx.response.type = 'テキスト/ HTMLを' ; // 設定応答の内容: ctx.response.bodyを=「< >こんにちは、>「のkoa2 </ H1のH1!; }
ここで、パラメータがctx
渡され、KOAは、我々が要求および応答を介してアクセスすることができ、要求と応答変数をカプセル化し、next
次に処理するKOA非同期関数を渡されます。
上記非同期関数は、我々が最初に使用されるawait next();
次の処理非同期関数を、次に、応答コンテンツタイプとコンテンツを提供しました。
async
関数は非同期関数での非同期マーカ機能と呼ばれている中で、あなたがすることができ、await
ES7に二つのキーワードを紹介します別の非同期関数を呼び出します。
導入プロジェクトで直接使用するために必要で、追加のNPMは、ここでは無視し、インストールすることなく、遼の先生koa2公式サイトでは、このパッケージをインストールする方法探るが、今節でkoa2埋め込まれています。
KOAミドルウェア(KOAコアコードミドルウェア)
のは、KOAの実装ロジックを詳しく見てみましょう。コアコードは次のとおりです。
app.use(非同期(CTX、次回)=> { ;次の()待つ ctx.response.type = 'text / htmlの' ; ctx.response.body = '<H1>こんにちは、koa2を</ H1>!' 。 });
各々がHTTP要求を受信し、によって呼び出さKOA app.use()
渡し、非同期登録機能ctx
とnext
パラメータ。
私たちはできるctx
動作し、リターンコンテンツを設定します。しかし、なぜ呼んでawait next()
?
理由はされて処理チェーンを構成する非同期機能の多くをKOA入れ、各非同期関数は、自分の事のいくつかを行うことができ、その後、await next()
次の非同期関数を呼び出します。当社のミドルウェアと呼ばれる各非同期機能、ミドルウェアは、多くの便利な機能を実行するために組み合わせることができます。
例えば、ミドルウェアは、以下の3つの処理チェーン、順次印刷ログ記録処理時、出力HTMLで構成することができます。
app.use(非同期(CTX、NEXT)=> { にconsole.log(ctx.request.method `$ {} {$` ctx.request.url}); // URL印刷 ザは、次に()を待つと、// コールミドルウェア }); app.use(非同期(CTX、次) => { CONSTスタート = 新しい新しい日付()getTime();. // 今回 ザ(次待つ); // 呼び出しの次のミドルウェア CONST MS = 新しい新しい日付().getTime() -スタート; // 時間を消費する にconsole.logを( `時間:$ {}はMSをms`); // プリント時間がかかる )}; app.use(非同期(CTX、NEXT) => { のawait次の()。 CTX .response.type= 'text / htmlの' ; ctx.response.body = '!<H1>こんにちは、koa2 </ H1>' ; });
ミドルウェアの順番は呼び出しされた、非常に重要であるapp.use()
ミドルウェアの順番を決定するシーケンスを。
ミドルウェアは呼び出さない場合はまた、await next()
あなたはどのように行うのでしょうか?答えは、ミドルウェアのフォローアップが実行されませんです。この状況は非常に一般的であり、例えば、ユーザー権限のミドルウェアを検出するための要求、または直接リターン403エラーの処理を継続するかどうかを決定することができます。
app.use(非同期(CTX、次)=> { 場合(待機checkUserPermission(CTX)){ )(次待つ; } そうでなければ{ ctx.response.status = 403 ; } })。
ミドルウェアを理解し、我々はすでにKOAを使用しています!
最後に、そのノートctx
オブジェクトのような速記方法、多数の有するctx.url
等価なctx.request.url
、ctx.type
相当しますctx.response.type
。