nest js

NestJs Custom decorator에 대해 알아보자

호리둥절 2023. 4. 7. 10:06

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