728x90

- 비밀번호 같은 정보 반환하고 싶지 않을 때

  @Column()
  @IsString({ message: stringValidationMessage })
  @Length(3, 8, {
    message: lengthValidationMessage,
  })
  @Exclude()
  password: string;

@Exclude()

  @Get()
  @UseInterceptors(ClassSerializerInterceptor)
  /**
   * serialization -> 직렬화 -> 현재 시스템에서 사용되는 (NestJS) 데이터의 구조를 다른 시스템에서도
   *                          쉽게 사용 할 수 잇는 포맷으로 변환
   *                       -> class의 object에서 JSON 포맷으로 변환
   * deserialiation -> 역직렬화
   */
  getUsers() {
    return this.usersService.getAllUsers();
  }

@UseInterceptors(ClassSerializerInterceptor)

route 위나, controller 클래스 위에 넣기 가능.


- Exclude Annotation

  @Column()
  @IsString({ message: stringValidationMessage })
  @Length(3, 8, {
    message: lengthValidationMessage,
  })
  /**
   * Request
   * frontend -> backend
   * plain object (JSON) -> class instance (dto)
   *
   * Response
   * backend -> frontend
   * class instance (dto) -> plain object (JSON)
   *
   * toClassOnly -> class instance로 변환될때만 = req
   * toPlainOnly -> plain object로 변환될때만 = res
   */
  @Exclude({
    toPlainOnly: true,
  })
  password: string;

 


- AppModule에 적용하기

api나 controller에 일일이 적어주기는 귀찮고/빼먹을 수 있기 때문에 Appmodule에 한번에 적용하기

// app.module.ts

providers: [
    { provide: APP_INTERCEPTOR, useClass: ClassSerializerInterceptor },
  ],

- 반대로 만들어서 보여주고 싶은 데이터가 있으면

// entity

  @Expose()
  get nicknameAndEmail() {
    return this.nickname + '/' + this.email;
  }

@Expose()


- Class는 숨기고, 특정 Column만 보여주기

@Entity()
@Exclude()
export class UsersModel extends BaseModel {}

Entity에 @Exclude() 걸고

 

@Column()
  @Expose()
  nickname: string;

보여주고 싶은 Column에 @Expose() 걸기


- 변환해서 보여주기

  @Transform(({ value }) => value.toString().toUpperCase())
  genre: string;

대문자로 변환하거나

 

  @Transform(({ value }) => 'code factory')
  genre: string;

특정 값으로 바꾸거나

 

 

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=184252&subtitleLanguage=ko&tab=curriculum&category=questionDetail

 

학습 페이지

 

www.inflearn.com

 

728x90

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

Pipe  (2) 2024.10.22
환경변수 ConfigModule (+ TypeORM DB 설정)  (0) 2024.10.21
Class Validator & DTO(Data Transfer Object)  (0) 2024.10.20
커스텀 데코레이터  (1) 2024.10.20
Guard 기본적 느낌  (0) 2024.10.20

+ Recent posts