본문으로 바로가기

Custom param decorators

category Node, Nest, Deno/🦁 Nest.js 2020. 11. 24. 21:53

docs.nestjs.com/custom-decorators

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

 

nest는 다음과 같은 param decorator를 제공합니다. 이 외에 커스텀 데코레이터를 만들 수도 있습니다.

param decorator express or fastify
Request(), @Req() req
@Response(), @Res() res
@Next() next
@Session() req.session
@Param(param?: string) req.params / req.params[param]
@Body(param?: string) req.body / req.body[param]
@Query(param?: string) req.query / req.query[param]
@Headers(param?: string) req.headers / req.headers[param]
@Ip() req.ip
@HostParam() req.hosts

 

 

createParamDecorator를 이용해 다음과 같이 데코레이터를 만들어줄 수 있습니다.

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

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

 

Guard에서했던 것처럼 gql을 이용 중이라면 다음과 같이 context 변환이 필요합니다.

export const AuthUser = createParamDecorator((data: unknown, context: ExecutionContext) => {
  const gqlContext = GqlExecutionContext.create(context).getContext(); // apollo-server context를 받기 위한 과정
  const user = gqlContext['user'];
  return user;
});

 

이렇게 만든 param decorator는 아래와 같이 @Args를 사용하던 것처럼 툭 넣어서 사용하면 됩니다. 편하죠.

@Query(() => User)
@UseGuards(AuthGaurd)
me(@AuthUser() authUser: User) {
  console.log(authUser);
  return authUser;
}

 

 

'Node, Nest, Deno > 🦁 Nest.js' 카테고리의 다른 글

Nest 프로젝트 플로우 종합 : gql, jest test, etc  (0) 2021.01.07
Task Scheduling(Cron, interval, timeout) in Nest  (0) 2021.01.06
Guard + MetaData  (0) 2020.11.24
Nest Middleware  (0) 2020.11.24
dynamic-modules 만들기  (0) 2020.11.24

darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체