Laravel経験者のNestJS入門【概要:インターセプタ】 

NestJSにおけるインターセプタに関するお勉強記録です。主に以下のページを見て学んだ内容になります。

Interceptors | NestJS – A progressive Node.js framework

インターセプタ

LaravelだとLaravel/Aspectというアスペクト志向プログラミングを実現できるパッケージに相当する機能のようです。コントローラのメソッドの前後に任意の処理を追加したり、メソッドの結果や例外を書き換えたりできます。

インターセプタの作成

NestJSでは以下のコマンドでインターセプタを作成できます。

nest g interceptor common/interceptor/logging

作成した直後はこんな感じです。NestInterceptorインターフェースのintercept()メソッドを実装しています。その中ではintercept()メソッドの第2引数のCallHandlerインターフェースのインスタンスnextでhandle()メソッドを呼び出しています。これがクライアントなどから呼び出されたコントローラのメソッドで、これの前後に好きなコードを書き加える事が出来ます。

以下の様に書き換えます。handle()メソッドはObservableを返すので、RxJSの演算子を使って様々な処理を実施することが可能です。以下の例では呼び出したいメソッドの前後でconsole.log()が実行されます。

インターセプタの割り当て

他の機能と同じようにデコレータでクラスやメソッドに割り当てます。インターセプタの場合は@UseInterceptorsを使います。1行目の様に@nest/commonからUseInterceptorsをインポートし、12行目の様にクラスに割り当てます。メソッドへの割り当ても出来ます。

他にも色々な例が記載されていましたがRxJSの使い方の説明に近いので割愛します。一応今回のサンプルコードを置いておきます。

コメントを残す

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