DTO Validation using class-validator {NestJS}
- https://docs.nestjs.com/techniques/validation
- Validation {typeorm}
- DTO를 Entity로 변환하기 # JSON 역직렬화하기 이 블로그는 더 나아가 DTO ⟶ Entity 변환하는 방법에까지 설명하고 있다.
ValidationPipe
객체를 app
의 global pipe로 추가하게 된다면, 컨트롤러가 인자에 들어온 DTO 타입을 해석하고 유효성 검사 및 자동 DTO 인스턴스 생성까지 해준다.
단지 컨트롤러 인자에 작성하는 Dto는 단순히 JS Plain Object의 형태로 들어온다. 따라서 ValidationPipe
를 사용하여 페이로드를 자동으로 해당 타입에 맞는 DTO 인스턴스로 변환하는 과정이 필요하다.
app.main.ts
async function bootstrap() {
...
app.useGlobalPipes(new ValidationPipe({
transform: true, // 자동으로 JS Object를 DTO로 변환 (Globally)
}));
...
}
user.controller.ts
@Post()
@UsePipes(new ValidationPipe( { transform: true } )) // 자동으로 JS Object를 DTO로 변환 (method-level)
create(@Body() createUserDto: CreateUserDto) {
return 'This action adds a new user';
}
user.dto.ts
NestJS 또한 class-validator를 사용하는구나.
export class CreateUserDto {
@IsEmail()
email: string;
@IsNotEmpty()
password: string;
}
Body만 검사할 줄 아냐? Param도 가능하다~
/** find-one-params.ts */
export class FindOneParams {
@isNumberString()
id: number;
}
@Get(':id')
findOne(@Param() params: FindOneParams) {
...
}