[TIL] NestJS 공부 13일차
Interceptors
@Injectable
데코레이터와 함께 사용하는 클래스다.
NestInterceptor interface를 구현해야하는 것이다.
Interceptor의 역할
메서드 실행 전/후에 추가적인 로직 추가
function으로부터 반환된 결과를 변환하거나 발생된 예외를 변환한다.
function 기능 확장 및 function override
등을 할 수 있다
Interceptor 기본
각 Interceptor는 intercept()
메서드를 구현한다. 인자는 ExecutionContext
와 Call Handler
를 받는다. 각 인자에 대한 설명은 아래에 자세히 설명하겠습니다.
ExecutionContext
guards에서 나왔던 그 친구맞고, ArgumentHost
를 확장함에 따라 헬퍼 메서드를 추가시켜준다. generic interceptor
구축 시 도움을 준다.
Call Handler
Call Handler
는 interceptor에서 특정 시점에 라우트 핸들러 메서드를 호출하는데 사용할 handle()메서드를 구현한다.
Interceptor 사용 1
처음은 사용자 interaction 기록을 위해 사용하는 것이다.예를 들어 비동기 이벤트 dispatching, timestamp 등이 있다. 아래의 예제를 보면서 이해해보자.
// logging.interceptor.ts
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> {
console.log('Before...');
const now = Date.now();
return next
.handle()
.pipe(tap(() => console.log(`After... ${Date.now() - now}ms`)));
}
}
인터셉터 바인딩
인터셉터 설정을 위해선 @UserInterceptors()
데코레이터를 사용한다.
안에 인자를 설정할 수 있는 데코레이터라는 것을 확인할 수 있었고
controller-scoped, method-scoped 나 global-scoped 등이 가능하다
컨트롤러에
@UseInterceptors(LoggingInterceptor)
export class CatsController {}
작성하면된다.
Author And Source
이 문제에 관하여([TIL] NestJS 공부 13일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ingyocode/TIL-NestJS-공부-13일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)