Laravel経験者のNestJS入門【概要:ミドルウェア】

NestJSにおけるミドルウェアに関するお勉強記録です。主に以下のページを見て学んだ内容になります。

Middleware | NestJS – A progressive Node.js framework

ミドルウェア

Laravelにもありますね。Controllerに処理が渡る前に何か処理を加えたりするやつです。

ミドルウェアの作成

NestJSでは以下のコマンドでミドルウェアを作成できます。

nest g middleware common/middleware/logger

作成した直後はこんな感じです。

これを以下の様に書き換えます。

app.module.tsの編集

app.module.tsを以下の様に書き換えます。

ミドルウェアはデコレータで登録するのではなく、モジュールクラスのconfigure()メソッドで設定します。またNestModuleインターフェースを実装する必要があるとのことです。インターフェースはTypeScriptの構文だからかimplementsしなくても動いてくれたけど。

ルートの除外

exclude()メソッドで特定のパスからmiddlewareの適用を除外できます。forRoutesではコントローラーを指定することも可能です。

関数ミドルウェアの作成

依存関係がないミドルウェアの場合、クラスを作らずに関数だけでも実装できます。logger.middleware.tsを以下のように書き換えます。

app.module.tsも関数名に変更します。

これで同様に動作します。

マルチプルミドルウェア

app.module.tsファイルのconfigure()メソッドでMiddlewareConsumerのapplyメソッドに複数のミドルウェアを渡すとその順番で処理が走ります。

consumer.apply(cors(), helmet(), logger).forRoutes(CatsController);

グローバルミドルウェア

main.tsファイルで以下の様に書くと全部のパスで実行されます。クラスの書き方については一応動いたけど、作法としては正しくないかも知れないです。(元のドキュメントには関数ミドルウェアの書き方しか書いてなかったので)

ルートの除外の部分まで実装したサンプルコードを置いておきます。

コメントを残す

メールアドレスが公開されることはありません。