728x90

controller에서 @해서 쓰는 데코레이터 커스텀으로 만들기

 

++ 내용 검증하고 반환해줄 수 있으니, req에 넣은 데이터 가져올 때 사용하면 좋을듯

https://springdream0406.tistory.com/193

 

Custom Decorator

fastcampus 강의// user-id.decorator.tsexport const UserId = createParamDecorator( (data: unknown, context: ExecutionContext) => { const request = context.switchToHttp().getRequest(); if (!request || !request.user || !request.user.sub) throw new Unauthori

springdream0406.tistory.com

 

 

- user.decorator.ts

export const User = createParamDecorator((data, context: ExecutionContext) => {
  const req = context.switchToHttp().getRequest();

  const user = req.user;

  if (!user) {
    throw new InternalServerErrorException(
      'User 데코레이터는 AccessTokenGuard와 함께 사용해야 합니다. Requset에 user 프로퍼티가 존재하지 않습니다!',
    );
  }

  return user;
});
@Post()
  @UseGuards(AccessTokenGuard)
  postPosts(
    @User() user: UsersModel,
    @Body('title') title: string,
    @Body('content') content: string,
  ) {
    const authorId = user.id;
    return this.postsService.createPost(authorId, title, content);
  }

 

만약 data도 사용하고 싶다면

export const User = createParamDecorator(
  (data: keyof UsersModel | undefined, context: ExecutionContext) => {
    const req = context.switchToHttp().getRequest();

    const user = req.user as UsersModel;

    if (!user) {
      throw new InternalServerErrorException(
        'User 데코레이터는 AccessTokenGuard와 함께 사용해야 합니다. Requset에 user 프로퍼티가 존재하지 않습니다!',
      );
    }

    if (data) {
      return user[data];
    }

    return user;
  },
);
@Post()
  @UseGuards(AccessTokenGuard)
  postPosts(
    @User('id') userId: number,
    @Body('title') title: string,
    @Body('content') content: string,
  ) {
    return this.postsService.createPost(userId, title, content);
  }

 

 

https://www.inflearn.com/course/lecture?courseSlug=nestjs-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-%EB%A7%88%EC%8A%A4%ED%84%B0-%ED%81%B4%EB%9E%98%EC%8A%A4-1&unitId=184234&subtitleLanguage=ko&category=questionDetail&tab=curriculum

 

학습 페이지

 

www.inflearn.com

728x90

'코딩 > Nest.js' 카테고리의 다른 글

Class Transformer  (0) 2024.10.21
Class Validator & DTO(Data Transfer Object)  (0) 2024.10.20
Guard 기본적 느낌  (0) 2024.10.20
Header에 id:password  (0) 2024.10.18
소셜 로그인  (0) 2024.06.15

+ Recent posts