nestjs에서 데코레이터는 애플리케이션의 모듈, 컨트롤러, 서비스 등의 클래스와 메서드에 붙일 수 있는 기능적인 어노테이션입니다. 앞서 배운 @body @param~ 등이 데코레이터입니다.
데코레이터는 클래스와 메서드에 메타데이터를 추가하거나 애플리케이션을 자동으로 구성하기 위해 사용될 수 있습니다.
커스텀 데코레이터란?
커스텀 데코레이터는 직접 만든 데코레이터로 nestjs에서 제공하는 데코레이터 외에도 자신이 원하는 기능을 구현하기 위해 만들어진것입니다.
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const User = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user;
},
);
위에 코드는 사용자 객체를 가져오기 위한 커스텀 데코레이터인 User을 정의하는 코드입니다.
createParamDecorator 함수를 사용하여 User 데코레이터를 생성하고, 데코레이터의 구현 함수를 전달합니다. 이 구현함수는 `data`와 `ctx` 파라미터를 받습니다.
구현함수에서는 `ctx`를 사용하여 현재 요청에서 사용자 객체를 추출하고, 해당 객체를 반환합니다. 먼저 `switchToHttp()`메서드를 사용하여 `ExecutionContext`를 HTTP컨텍스트로 전환합니다. 그리고 `getRequest() 메서드를 사용하여 현재 request 객체를 가져옵니다. 마지막으로 요청 객체의 user 속성을 반환하여, 현재 사용자 객체를 가져옵니다.
이렇게 생성된 User 데코레이터는 컨트롤러 메서드에서 사용될 수 있으며, 해당 메서드의 파라미터에서 @User() 형태로 사용할 수 있습니다. 이를 통해 해당 컨트롤러 메서드에서 사용자 객체를 쉽게 가져올 수 있습니다.
@Get()
async findOne(@User() user: UserEntity) {
console.log(user);
}
'nest js' 카테고리의 다른 글
NestJs 프로젝트에서 Swagger 사용하기 (0) | 2023.04.07 |
---|---|
NestJs Guard에 대해 알아보자 (0) | 2023.04.07 |
NestJs custom pipe 에 대해 알아보자 (0) | 2023.04.06 |
NestJs Pipe에 대하여 알아보자 (0) | 2023.04.06 |
NestJs 미들웨어 (0) | 2023.04.06 |