개요
class-validation, class-transformer 은 타입의 안정성을 높이고 원하는 값이 입력되는 가를 검증하는 데에 사용되는 라이브러리 입니다. 기존의 자바 스크립트의 문법으로 원하는 값을 얻으려고 하면 각 validate 메소드를 작성을 하여야 했으나, 간단한 decarator 추가 함으로 인해 쉽게 검증을 할 수 있게 되었습니다. 그렇다면 어떻게 다운을 하고 사용할 수 있는지 알아 보도록 하겠습니다.
설치하기
npm install class-validator class-transformer @nestjs/mapped-types
설정하기
라이브러리를 사용하기 위해 main.ts
에 설정을 추가
// ValidationPipe 전역 적용
app.useGlobalPipes(
new ValidationPipe({
// class-transformer 적용
transform: true,
}),
);
사용하기
class-validator
먼저 class-validator
을 적용한 DTO
입니다.
export class CreateVideoReqDto {
@ApiProperty({ required: true }) // swagger 관련 내용
@MinLength(2) // 최소 2글자 이상
@MaxLength(30) // 최대 30글자 이하
@IsString() // Type은 String만 허용
title: string;
@ApiProperty({ type: 'string', format: 'binary', required: true }) // swagger 관련 내용
video: any;
}
위와 같이 간단하게 Decorator만 지정을 해주면 입력 받는 값에 대한 Validate를 수행하게 되고, 조건에 맞지 않는 값이 입력되게 되면 에러를 반환하게 됩니다.
class-transformer
Transform
은 입력 받은 값을 1차적인 처리 후 받게되는 stream
구조를 가지고 있는 라이브러리 입니다. 이전에 설정한 내용을 보게 되면 pipe
라는 이름으로 설정을 하였는데, 이러한 과정이 하나의 파이프라인처럼 짜여진 구조에 흘러가지는 그림이라고 생각하면 되겠습니다.
실제로 사용되는 코드는 아래와 같습니다.
export class PageReqDto {
@ApiPropertyOptional({ description: '페이지. default = 1', default: 1 }) // swagger 관련 내용
@Transform((param) => Number(param.value)) // query 값이 string 타입으로 number 타입으로 변경
@IsInt() // int타입인지 validate
page?: number = 1;
@ApiPropertyOptional({ description: '페이지당 데이터 갯수. default = 20', default: 20 }) // swagger 관련 내용
@Transform((param) => Number(param.value)) // // query 값이 string 타입으로 number 타입으로 변경
@IsInt() // int타입인지 validate
size?: number = 20;
}
controller 적용
JS의 Desctructure
를 사용하여 입력 받는 값의 멤버변수 값으로 바로 입력 받아서 사용하고 있는 모습입니다.
@Get()
findAll(@Query() { page, size }: PageReqDto) {
return this.userService.findAll(page, size);
}
'Backend > Nest.js' 카테고리의 다른 글
Nest.js Swagger Bearer 인증 적용 (1) | 2023.09.26 |
---|---|
Nest.js Security Jwt strategy 적용 (0) | 2023.09.26 |
Nest.js Swagger 설치 및 설정 (0) | 2023.09.25 |
Nest.js Swagger 용 Decorator 작성 (0) | 2023.09.25 |
Next.js Typeorm 설치 및 설정 (0) | 2023.09.25 |