//main.js
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {ValidationPipe} from "@nestjs/common";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
💡 보통의 경우
validation을 사용하기 위해 위와 같이validationPipe()를 사용한다.
하지만 이대로 사용하게 되면 문제점이 하나 있다.
// dto.ts
import {IsNotEmpty} from "class-validator";
export class CreateMovieDto {
@IsNotEmpty()
title: string;
@IsNotEmpty()
genre: string;
}

💡 위와 같은
Dto가 존재할 때,Dto에 정의되지 않은 값도 포함하여movie가 생성되는 것을 알 수 있다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {ValidationPipe} from "@nestjs/common";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({
whitelist: true, // Dto 에 정의되지 않은 값은 무시한다.
}));
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
💡 원치 않는 값을 포함하지 않도록 하기 위해선
ValidationPipe에whitelist: true옵션을 추가하면 된다.

📌
Dto에 정의되지 않은"WrongKey": "이상한 값"이 무시되는 것을 알 수 있다.
💡 또한, 원치 않는 값이 들어왔을때, 에러를 발생시키고 싶다면
forbidNonWhitelisted: true옵션을 추가하면 된다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {ValidationPipe} from "@nestjs/common";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({
whitelist: true, // Dto 에 정의되지 않은 값은 무시한다.
forbidNonWhitelisted: true // Dto 에 정의되지 않은 값이 들어오면 에러를 발생시킨다.
}));
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

📌
Dto에 지정되지 않은 값이 들어오자 에러를 반환하는것을 볼 수 있다.