// 인터셉터는 AOP 이다.
// 라우터가 4개가 있다면,
•
A -> B -> C -> D
•
A -> C -> D
•
A -> E -> F -> D -> G
•
Z -> A -> X -> D
•
4개의 라우터에 공통점은 A 가 실행되고 그 이후 D 가 실행된다는 것이다.
•
그럼 D 를 중복 제거 할수 있지 않을까?
•
인터셉터는 이러한 개념이다.
•
컨트롤러 실행 전/후 에 특정 동작을 넣어 줄 수 있다.
•
예를들면 로거 미들웨어를 구현한 것을 인터셉터로 구현해도 된다.
•
인터셉터는 보통 컨트롤러 후 에 동작하는 것을 조작할 때 많이 쓴다.
•
컨트롤러에서 리턴한 데이터를 마지막으로 가공하는 찬스를 가질 수 있다.
import { CallHandler, ExecutionContext, NestInterceptor } from "@nestjs/common";
import { Observable } from "rxjs";
import { map } from 'rxjs/operators'
export class UndefinedToNullInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler<any>,) : Observable<any> | Promise<Observable<any>> {
return next.handle().pipe(map(data => data === undefined ? null : data)); // 여기서 데이터는 controller 에서 리턴한 데이터이다.
}
}
Plain Text
복사