Nest.js Interceptors
4929 ワード
受信者には切断()方法があります.ここには2つの論点がある.
ArgumentHostから を継承
インタフェースは、特定の時点でルーティングハンドルメソッドを呼び出す際に使用されるハンドル()メソッドを表す. ハンドル()メソッドが呼び出されない限り、ルーティングハンドルメソッドは絶対に実行されません.
CatsControllerのCreate()HandlerにマッピングされたPOST/catsというリクエストがあります.handle()が呼び出され、Observerableが返されると、create()プロセッサがトリガーされて実行されます.handle()が実行されない場合、コントローラのメソッドは絶対に実行されません.その後、応答ストリームがObservableを受信すると、ストリーム内で他の操作を実行することができ、最終的な結果は呼び出し元に返される.
ルータハンドルが実行される前と後に、私たちが望む論理を挿入すればいいです.
ルータプロセッサメソッドを実行する前に処理するために、ブロック()メソッドでhandle()メソッドを呼び出す前に、私たちが望む論理を実行させることができますが、handle()の後に処理する論理はどうすればいいですか?
handle()はobserveraleを返すので、RxJSを使用して任意に応答できます.
ExecutionContext
Call handler
例
CatsControllerのCreate()HandlerにマッピングされたPOST/catsというリクエストがあります.handle()が呼び出され、Observerableが返されると、create()プロセッサがトリガーされて実行されます.handle()が実行されない場合、コントローラのメソッドは絶対に実行されません.その後、応答ストリームがObservableを受信すると、ストリーム内で他の操作を実行することができ、最終的な結果は呼び出し元に返される.
ルータハンドルが実行される前と後に、私たちが望む論理を挿入すればいいです.
ルータプロセッサメソッドを実行する前に処理するために、ブロック()メソッドでhandle()メソッドを呼び出す前に、私たちが望む論理を実行させることができますが、handle()の後に処理する論理はどうすればいいですか?
handle()はobserveraleを返すので、RxJSを使用して任意に応答できます.
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
// handler()호출 전에 실행되는 부분
console.log('Before...');
const now = Date.now();
return next
.handle()
.pipe(
tap(() => console.log(`After... ${Date.now() - now}ms`)),// handler()호출 이후에 실행되는 부분
);
}
}
Reference
この問題について(Nest.js Interceptors), 我々は、より多くの情報をここで見つけました https://velog.io/@adam2/Nest.js-Interceptorsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol