Validation Pipe

김영훈·2024년 11월 16일

NestJS

목록 보기
2/9
post-thumbnail

Validation Pipe

//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();

💡 원치 않는 값을 포함하지 않도록 하기 위해선 ValidationPipewhitelist: 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 에 지정되지 않은 값이 들어오자 에러를 반환하는것을 볼 수 있다.

0개의 댓글