docs.nestjs.com/custom-decorators
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 |