안녕하세요. 주니어 백엔드 개발자 입니다.
심바 블로그
안녕하세요. 주니어 백엔드 개발자 입니다.
>> Github 바로가기
  • 분류 전체보기 (31)
    • AWS (3)
    • DATABASE (2)
    • Docker (1)
    • Architecture (3)
    • GraphQL (5)
    • JS (1)
    • NestJS (8)
    • 테스트 코드 (3)
    • 세미나 (4)
    • 기타 (1)
    • 이전 블로그 자료들 (0)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
안녕하세요. 주니어 백엔드 개발자 입니다.

심바 블로그

NestJS

Nest.js custom decorator 사용하기

2023. 3. 7. 18:40
반응형

 

nestjs에선 decorator에 대한 여러 가지 기능을 제공한다. 먼저 request에 해당하는 부분에 데이터를 데코레이터를 사용해 핸들링할 수 있고, 여러 데코레이터들을 하나로 묶는 기능도 제공한다.

1. request 관련 데이터 커스텀 데코레이터 사용하기

import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const User = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return request.user;
  },
);

해당 코드는 nestjs 공식문서에 나와있는 코드다. createParamDecorator를 import 해와서 위처럼  작성해 주면 @User()라는 데코레이터를 함수 파라미터에 선언해 사용할 수 있다. @AuthGuard()를 통해 가져온 토큰내부의 데이터를 받아올 때 유용하게 쓰고 있다.

 

 

2. 여러 데코레이터 묶어 사용하기

import { applyDecorators } from '@nestjs/common';

export function Auth(...roles: Role[]) {
  return applyDecorators(
    SetMetadata('roles', roles),
    UseGuards(AuthGuard, RolesGuard),
    ApiBearerAuth(),
    ApiUnauthorizedResponse({ description: 'Unauthorized' }),
  );
}

해당 코드도 공식문서에 있는 코드다. 이런 식으로 applyDecorators 함수를 import해와서 내부에 원하는 데코레이터들을 작성해 주면 @Auth() 데코레이터 하나로 위에 작성된 여러 데코레이터들을 전부 사용할 수 있다.

 

 Auth는 그냥 함수로 선언되어 export 되기 때문에 사용자가 원하는 대로 분기처리해서 사용해도 된다.

반응형

'NestJS' 카테고리의 다른 글

Express에서 DI 프레임워크 만들어보기  (0) 2023.05.04
Nest.js에서 모듈간의 의존성 관리하기  (0) 2023.04.19
AuthGuard 예외처리 조건 만들기  (0) 2023.04.19
Nest.js 에서 역직렬화 하기  (0) 2023.03.14
@nestjs/config 사용하는 이유  (0) 2023.02.09
    'NestJS' 카테고리의 다른 글
    • Nest.js에서 모듈간의 의존성 관리하기
    • AuthGuard 예외처리 조건 만들기
    • Nest.js 에서 역직렬화 하기
    • @nestjs/config 사용하는 이유
    안녕하세요. 주니어 백엔드 개발자 입니다.
    안녕하세요. 주니어 백엔드 개발자 입니다.

    티스토리툴바