DTO & 유효성 검사 (ValidationPipe)
2022. 8. 27. 23:33ㆍNest.js
//main.ts
app.useGlobalPipes(
new ValidationPipe()
)
npm i class-validator class-transformer
//create-movie.dto.ts
import { IsNumber, IsString } from "class-validator";
export class CreateMovieDto{
@IsString()
readonly title: string;
@IsNumber()
readonly year: number;
@IsString({ each: true })
readonly genres: string[];
}
유효성 검사를 위해 작성한다.
빠진 값이 있거나 타입에 맞지 않는 값이 있을 경우 에러를 내보낸다 하지만 , 여기까지만 하면 추가로 바디값에 넣는 건 잡아내지 못한다.
{
"statusCode": 400,
"message": [
"title must be a string",
"year must be a number conforming to the specified constraints",
"each value in genres must be a string"
],
"error": "Bad Request"
}
//main.ts
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
})
)
위의 코드를 추가함으로써 미리 지정해놓은 값이 아닌경우 에러를 내보내는 더 완벽한 유효성 체크가 된다.
마지막으로 transform: true 를 추가하게 되면 지정해준 타입으로 변경해준다.
예를 들면 get요청시 Param id를 number로 지정해놓았다면 맞게 변경해준다.
원래는 string으로 들어왔었음.
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true, //들어오는 값을 지정해준 타입으로 변경해준다.
})
)
업데이트 요청시 create할 때 바디값을 전부 채울 필요가 없이 , 수정하려는 값만 채우면 된다.
그 경우 PartialType(적용하려는Dto)를 이용하여 해결가능하다.
npm i @nestjs/mapped-types
//update-movie.dto.ts
export class UpdateMovieDto extends PartialType(CreateMovieDto) {}
'Nest.js' 카테고리의 다른 글
Providers/ DI (0) | 2022.09.04 |
---|---|
Controller (0) | 2022.09.04 |
Nest.js 기본 (0) | 2022.08.26 |
TypeORM (0) | 2022.08.23 |
Nest.js 설치 및 시작 (0) | 2022.08.17 |