NestJS Custom Decorator 사용하기

Seunghwa's Devlog·2023년 2월 15일
1

NestJs

목록 보기
12/15
post-thumbnail

NestJS에는 여러가지 데코레이터가 존재한다. @Body(), @Param()등 특정 요청에 대한 값에 대해 접근할 수 있다.

위와 같은 데코레이터들을 커스텀하여 사용할 수 있다.

Custom Decorator

Custom Decorator를 사용하면 request 또는 response에 대해 custom 하여 내가 원하는데로 만들어 줌으로써 재사용이 가능하고 요구사항이 맞는 곳이면 어디에서나 간단하게 사용가능 하다.

예를들어 request.user를 받아오는 데코레이터를 만들어보자.

// src/common/decorator/user.decorator.ts

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

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

이렇게 request.user를 받아오는 Custom decorator를 만들어주면

@Get()
async findOne(@Req() req) {
  return req.user
}

이렇게 request를 직접 받아서 사용하던 코드를

@Get()
async findOne(@User() user: UserEntity) {
  return user;
}

이렇게 사용할 수 있게 된다. 또한 request를 받아서 사용할 때 type 추론을 하지 못하는 것에 반해 Custom decorator를 사용함으로써 type 추론까지 가능해진다.

참고링크 : https://docs.nestjs.com/custom-decorators

profile
에러와 부딪히고 새로운 것을 배우며 성장해가는 과정을 기록합니다!

0개의 댓글