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;
특정 값으로 바꾸거나
학습 페이지
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 |