✅ 객체를 클래스 인스턴스로 변환하거나 클래스 인스턴스를 JSON 객체로 변환하는 데 사용되는 라이브러리다.
주요기능
- 객체 변환 : 평범한 자바스크립트 객체(Plain Object)를 클래스의 인스턴스로 변환한다.
- 직렬화 및 역직렬화 : 클래스 인스턴스를 JSON 등으로 직렬화하거나 역직렬화 한다.
- 데이터 보호 : 특정 속성을 제외하거나 노출하여 데이터의 보안과 무결성을 유지 할 수 있다.
- 데이터 변환 : 데이터의 형식을 변환하거나 커스텀 로직을 적용할 수 있다.
사용 예시
controller.ts
// controller에 ClassSerializerInterceptor를 적용시킨다.
// class-transformer를 controller에 적용을 하기 위한 코드
@UseInterceptors(ClassSerializerInterceptor)
entity.ts
import { Exclude, Expose, Transform } from 'class-transformer';
// @Exclude() // 클래스 전체를 Exclude해서 아무것도 안보이게 할 수 있음
export class Movie {
id: number;
title: string;
// @Expose() // 값을 노출시킬 수 있음
// @Exclude() // 해당 속성을 노출 안시킬수 있고 , 콘솔찍어보면 값은 그대로 있음
// @Transform(({ value }) => value.toString().toUpperCase()) // value 값을 아예 바꿀수 있음 (custom-transformer)
genre: string;
}
- controller에
ClassSerializerInterceptor
를 적용 시킨다.
- 검증하고싶은
property
에 데코레이터를 달아준다.
@Exclude()
는 해당 하는 속성을 숨길 수 있고 , 값은 그대로 있다.
@Expose()
는 값을 노출시킬 수 있다.
@Transform
은 custom-transformer
의 역할을 하는데 해당하는 value값을 아예 바꿔서 노출 시킬 수 있다.
@Expose() 적용 예시
import { Exclude, Expose, Transform } from 'class-transformer';
@Exclude() // 클래스 전체를 Exclude해서 아무것도 안보이게 할 수 있음
export class Movie {
id: number;
title: string;
@Expose() // 해당 property만 노출
genre: string;
}
요청 결과
@Exclude
로 전체를 안보이게 설정하고 , genre
속성만 @Expose
를 이용해서 해당속성만 보이게 했다.
@Exclude() 적용 예시
import { Exclude, Expose, Transform } from 'class-transformer';
export class Movie {
id: number;
title: string;
@Exclude()
genre: string;
}
요청 결과
genre
속성에 @Exclude
를 적용시켜서 요청한 결과 genre
속성만 리턴되지 않았다.
import { Exclude, Expose, Transform } from 'class-transformer';
export class Movie {
id: number;
title: string;
@Transform(({ value }) => value.toString().toUpperCase()) // value 값을 대문자로 바꿈
genre: string;
}
요청 결과
@Transform
을 사용해서 해당 속성의 string
값을 대문자로 바뀐 상태로 리턴 되게 했다.
참조