본문 바로가기

node.js

Nest.js - 인터셉터

 
 

인터셉터

@Injectable()인터셉터는 데코레이터 로 주석이 달린 클래스 이며 NestInterceptor인터페이스를 구현합니다.

 

인터셉터에는 AOP( Aspect Oriented Programming ) 기술 에서 영감을 받은 유용한 기능 세트가 있습니다 . 이를 통해 다음을 수행할 수 있습니다.

  • 메서드 실행 전후에 추가 논리 바인딩
  • 함수에서 반환된 결과를 변환
  • 함수에서 throw된 예외를 변환합니다.
  • 기본 기능 동작 확장
  • 특정 조건에 따라 함수를 완전히 재정의합니다(예: 캐싱 목적)

라이프 사이클

  1. Incoming request
  2. Globally bound middleware
  3. Module bound middleware
  4. Global guards
  5. Controller guards
  6. Route guards
  7. Global interceptors (pre-controller)
  8. Controller interceptors (pre-controller)
  9. Route interceptors (pre-controller)
  10. Global pipes
  11. Controller pipes
  12. Route pipes
  13. Route parameter pipes
  14. Controller (method handler)
  15. Service (if exists)
  16. Route interceptor (post-request)
  17. Controller interceptor (post-request)
  18. Global interceptor (post-request)
  19. Exception filters (route, then controller, then global)
  20. Server response 

위 라이프 사이클을 보면 미들웨어랑 인터셉터랑 차이점은 실행 순서다. 미들웨어 같은경우 요청이 들어오고 바로 실행되

 

고 인터셉터는 pre ,post로 나눠저 실행된다. 

import {
  Injectable,
  NestInterceptor,
  ExecutionContext,
  CallHandler,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable()
export class SuccessInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(
      map((data) => ({
        success: true,
        data,
      })),
    );
  }
}

요청에 성공했을때 찍어주는 인터셉터 로그 코드다.

 

@Controller('cats')
@UseInterceptors(SuccessInterceptor)
@UseFilters(HttpExceptionFilter)
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

@UseInterceptors(SuccessInterceptor) 를 사용하여 사용하고 싶은 클래스에 달아주면 된다.

 

'node.js' 카테고리의 다른 글

Nest.js - validation  (0) 2022.08.29
Nest.Js - mongoDB 연결  (0) 2022.08.29
Nest.js - pipes  (0) 2022.08.20
Nest.js - 예외 필터  (0) 2022.08.20
Nest.js - 미들웨어  (0) 2022.08.20