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の使い方の説明に近いので割愛します。一応今回のサンプルコードを置いておきます。