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;
}