[TIL] NestJS 공부 10일차

지난 글에 이어 Guards에 대해 더 공부해보자

바인딩 가드

pipe와 마찬가지로 controller-scoped, method-scoped,global-scoped로 쓰일 수 있다. 데코레이터는 @useGuards를 사용해서 contoller-scoped를 사용할 수 있다.
이 데코레이터는 하나의 인자를 갖을 수 있고 컴마로 구분하여 리스트를 받을 수 있다.
그리고 한번의 선언으로 설정을 적절하고 쉽게 적용할 수 있는 것이 장점이다.

@Controller('cats')
@UseGuards(RolesGuard)
export class CatsController {}

이렇게 한다면 위 컨트롤러가 선언한 모든 핸들러에 guard가 부착된다.
하나의 메서드에만 적용되길 원한다면 @UseGuards의 method level에서 적용해주면 된다.

그리고 global-guard를 set하기 위해선 useGlobalGuards()메서드를 사용하면된다.

const app = await NestFactory.create(AppModule);
app.useGlobalGuards(new RolesGuard());

말 그대로 global이니 전체 애플리케이션에서 사용된다. 의존성 주입 과정에서 위 메서드가 등록되면 의존성 주입을 할 수 없으므로 아래의 구조로 사용해야한다.

// app.module.ts
import { Module } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';

@Module({
  providers: [
    {
      provide: APP_GUARD,
      useClass: RolesGuard,
    },
  ],
})
export class AppModule {}

좋은 웹페이지 즐겨찾기