요청을 검증하는 역할을 한다.
dto
- 요청/응답시 사용할 데이터의 종류를 지정한다.
- 모듈 폴더에 따로 dtos 폴더를 두고 사용한다.
- 이름.dto.ts 로 이름짓는다.
- 내부는 class를 통해 타입을 지정한다.
export class CreateMessageDto {
content: string;
}
전역 요청을 검증하는 Validation 추가하기
- 값의 검증을 위해선 class-validator, class-transformer 라이브러리를 필요로 한다.
- npm install class-validator
- npm install class-transformer
- 이들을 바탕으로 완성된 dto
export class CreateMessageDto {
@IsString() // 문자열 여부를 확인한다.
content: string;
}
- 요청의 json body를 받아 class 객체로 변환한다.
Class-validator
- dto에 사용, 받아온 class가 올바른지 검증한다.
- 검증대상은 컨트롤러에서 바디로 받아오기로 한 타입을 통해 결정한다.
- 검증 실패시 바로 실패를 리턴한다.
자바스크립트로 변환되면 타입이 사라지는데 검증이 가능한 이유
- tsconfig에서 관련 메타데이터를 남겨놓도록 했기 때문이다.
절차
- main.ts 에 ValidationPipe를 전역으로 추가한다.
- 컨트롤러에서 parameter로 받아온 body의 type을 dto로 설정한다.
async function bootstrap() {
const app = await NestFactory.create(MessagesModule);
// 이부분을 추가한다.
app.useGlobalPipes(
new ValidationPipe()
)
app.listen(3000);
}
bootstrap();
- ValidationPipe() 의 소괄호에 object 형식으로 설정을 작성할수 있다.
속성 리스트
- whitelist : boolean
- true일시 입력에서 dto에 있는것을 제외하고 나머지는 다 쳐냄