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!
밸리데이션 파이프를 설정하면, 컨트롤러로 들어오는 요청의 데이터를 자동으로 검증할 수 있음!!
DTO 클래스 정의: 데이터 전송 객체(Data Transfer Object, DTO) 클래스를 정의하고, 이 클래스에 class-validator 데코레이터를 사용하여 검증 규칙을 적용합니다.
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는 한 세트였던 것이었던 것이었던 것이었다..
