[Node.js/Koa]Koaミドルウェア


Expressについて議論し,미들웨어(Middleware)について理解した.미들웨어は、要求と応答との間の動作をミドルウェアと呼ぶ.ルータなどは典型的な中間部品である.Koaライブラリもミドルウェアを非常に重視しています.

Koaミドルウェア

Koaは、use()関数を使用してミドルウェア関数を登録する.このuse()関数の基本タイプは次のとおりです.
use(미들웨어 함수);
미들웨어 함수は、ミドルウェアを記述する関数であり、以下の構成を有する.
(context, next) => {};
第1のパラメータcontextは、要求/応答に関する情報を含む.2番目のパラメータnextは、次のミドルウェアを呼び出す関数です.next関数がない場合、後続のミドルウェアは処理されません.
では、ミドルウェアの作成方法が理解されている以上、前回作成したコードにミドルウェア機能を追加しましょう.
const koa = require('koa');

const app = new koa();
const PORT = process.env.PORT || 3000;

app.use((context, next) => {
    console.log(context.url);
    console.log('1st Middleware');

    next();
});

app.use((context, next) => {
    console.log('2nd Middleware');

    next();
});

app.use(context => {
    context.body = 'Hello Koa!';
});

app.listen(PORT, () => {
    console.log(`Koa is listening to port number: ${PORT}`);
});
node 파일경로コマンドを使用してサーバを実行し、localhost:3000に接続すると、端末は次のログを記録します.の間、/favicon.icoはサイトのアイコンファイルであり、デフォルトでは要求されたファイルであり、コンソールに表示されます.ないかもしれないので、あまり気にしないでください.
要するに、結局、ミドルウェアで書いた内容が端末でよく表現されたのではないでしょうか.
今回は,作成したばかりのコードに,最初のミドルウェアのnext()関数を注釈する.
const koa = require('koa');

const app = new koa();
const PORT = process.env.PORT || 3000;

app.use((context, next) => {
    console.log(context.url);
    console.log('1st Middleware');

    //next(); 주석 처리
});

app.use((context, next) => {
    console.log('2nd Middleware');

    next();
});

app.use(context => {
    context.body = 'Hello Koa!';
});

app.listen(PORT, () => {
    console.log(`Koa is listening to port number: ${PORT}`);
});
接続されたミドルウェアのnextが失われたため、登録された最初のミドルウェアのみが実行されます.

next()関数はPromiseを返します


実はuse()関数のnext()はExpressにもありますKoanext()は、Pormiseを返します.これはExpressと区別する特徴です.基本情報が返されるため、接続された次のミドルウェアのnext()が返す基本情報は、前のミドルウェアが終了した後に返さなければならない.next()はpromisを返すので、以下に示すようにthen()を使用することができる.
const koa = require('koa');

const app = new koa();
const PORT = process.env.PORT || 3000;

app.use((context, next) => {
    console.log(context.url);
    console.log('1st Middleware');

    next().then(() => {
        console.log('End');
    });
});

app.use((context, next) => {
    console.log('2nd Middleware');

    next();
});

app.use(context => {
    context.body = 'Hello Koa!';
});

app.listen(PORT, () => {
    console.log(`Koa is listening to port number: ${PORT}`);
});

また、Koaasync/await構文もサポートしているので、Expressのようにtry~catchで例外処理や追加のライブラリインストールを行う必要はありません.
const koa = require('koa');

const app = new koa();
const PORT = process.env.PORT || 3000;

app.use(async (context, next) => {
    console.log(context.url);
    console.log('1st Middleware');

    await next();
    console.log('End with async/await');
});

app.use((context, next) => {
    console.log('2nd Middleware');

    next();
});

app.use(context => {
    context.body = 'Hello Koa!';
});

app.listen(PORT, () => {
    console.log(`Koa is listening to port number: ${PORT}`);
});