반응형
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 |