import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
app.useGlobalPipes(new ValidationPipe())
}
bootstrap();
npm install class-validator class-transformer
로 설치해준다계속 app.useGlobalPipes() 함수가 동작 안 했는데 알고보니
async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe()) await app.listen(3000); //app.useGlobalPipes(new ValidationPipe()) }
app.listen() 함수 후에 적용하고 있었다..
{
"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"
}
{
"statusCode": 400,
"message": [
"property hacked should not exist",
"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"
}
이렇게 나온다.
transform :
import { IsString, IsNumber} from 'class-validator'
export class CreateUpdateDto{
@IsString()
readonly title?: string;
@IsNumber()
readonly year?: number;
@IsString({each:true})
readonly genres?: string[];
}
title만 수정하거나, year만 수정하고싶기때문에 ?
붙여준다.
즉, 모든게 필수 사항이 아니다 라는것.
근데! 이렇게 하는대신 Partial types(부분 타입) 방법을 쓸거다.
npm install @nestjs/mapped-types 로 필요한거 설치
export class UpdateMovieDto extends PartialType(CreateMoveDto) {
}
PartialType은 base type 이 필요하다 그게 CreateMovieDto
이렇게 하면 UpdateMovieDto는 기본적으로 CreateMovieDto 와 같다
전부 필수사항이란것만 빼면.
class-validator
https://github.com/typestack/class-validator
NestJS를 쓸때 Typescript 의 보안도 이용할 수있고, 유효성 검사도 우리가 따로 하지 않아도 된다.