Validator

ClassBinu·2024년 5월 21일

F-lab

목록 보기
36/65

class-validator 대충 쓰기만 했는데, 공식 문서 참고하기!

모델에서 유효성 조건 설정

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
import {
    Contains,
    IsInt,
    Length,
    IsEmail,
    IsFQDN,
    IsDate,
    Min,
    Max,
} from "class-validator"

@Entity()
export class Post {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    @Length(10, 20)
    title: string

    @Column()
    @Contains("hello")
    text: string

    @Column()
    @IsInt()
    @Min(0)
    @Max(10)
    rating: number

    @Column()
    @IsEmail()
    email: string

    @Column()
    @IsFQDN()
    site: string

    @Column()
    @IsDate()
    createDate: Date
}

검증하기

import { validate } from "class-validator"

let post = new Post()
post.title = "Hello" // should not pass
post.text = "this is a great post about hell world" // should not pass
post.rating = 11 // should not pass
post.email = "google.com" // should not pass
post.site = "googlecom" // should not pass

const errors = await validate(post)
if (errors.length > 0) {
    throw new Error(`Validation failed!`)
} else {
    await dataSource.manager.save(post)
}

밸리데이터만 단다고 해서 검증이 자동으로 이루어지는 건 아님. validate() 호출해야 함.
근데 nest에서는 class-trnasformer로 자동 검증할 수 있음.

이때 사용하는 게 ValidationPipe!

밸리데이션 파이프를 설정하면, 컨트롤러로 들어오는 요청의 데이터를 자동으로 검증할 수 있음!!

NestJS에서 자동 유효성 검사 설정 방법

  1. DTO 클래스 정의: 데이터 전송 객체(Data Transfer Object, DTO) 클래스를 정의하고, 이 클래스에 class-validator 데코레이터를 사용하여 검증 규칙을 적용합니다.

  2. Global Validation Pipe 설정: 애플리케이션 레벨에서 ValidationPipe를 글로벌 파이프로 설정하여 모든 들어오는 요청에 대해 자동으로 검증을 수행하도록 합니다.

요렇게 집어넣으면 됨!

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(3000);
}
bootstrap();

헐. 드디어 깨우쳤다..🚀
class-validator와 validation Pipe는 한 세트였던 것이었던 것이었던 것이었다..

0개의 댓글