Nodejs

 

 

1. @IsNotEmpty()

  • 빈 값(Empty)을 허용하지 않음
  • "", null, undefined가 들어오면 검증 에러 발생
  • @IsOptional()과 함께 사용하면, 필드가 존재할 경우에만 검증됨

import { IsNotEmpty } from 'class-validator';

class ExampleDto {
  @IsNotEmpty()
  name: string; // 빈 값이 들어오면 에러 발생
}

 

2. @IsOptional()

  • 필드를 선택적으로 입력할 수 있도록 허용함
  • 요청에서 해당 필드가 누락되면 검증을 수행하지 않음
  • 단, 값이 존재할 경우 다른 검증 조건을 적용할 수 있음

import { IsOptional, IsString } from 'class-validator';

class ExampleDto {
  @IsOptional()
  @IsString()
  description?: string; // 값이 있으면 문자열이어야 함, 없으면 검증하지 않음
}

 

3. @IsString()

  • 문자열인지 검증
  • 숫자, 객체, 배열 등이 들어오면 에러 발생

import { IsString } from 'class-validator';

class ExampleDto {
  @IsString()
  text: string; // 문자열이 아닌 값이 들어오면 에러 발생
}

 

4. @IsNumber()

  • 숫자인지 검증
  • allowNaN: true 옵션을 사용하면 NaN 허용 가능
  • allowInfinity: true 옵션을 사용하면 Infinity 허용 가능

import { IsNumber } from 'class-validator';

class ExampleDto {
  @IsNumber()
  amount: number;
}

 

5. @IsInt()

  • 정수인지 검증 (소수점 허용 안 됨)

import { IsInt } from 'class-validator';

class ExampleDto {
  @IsInt()
  age: number; // 정수만 허용
}

 

6. @IsBoolean()

  • true 또는 false 값만 허용
import { IsBoolean } from 'class-validator';

class ExampleDto {
  @IsBoolean()
  isActive: boolean;
}

 

7. @IsArray()

  • 배열인지 검증
import { IsArray } from 'class-validator';

class ExampleDto {
  @IsArray()
  items: string[];
}

 

8. @IsEmail()

  • 이메일 형식인지 검증
import { IsEmail } from 'class-validator';

class ExampleDto {
  @IsEmail()
  email: string;
}

 

9. @IsEnum()

  • 특정 Enum 값인지 검증

import { IsEnum } from 'class-validator';

enum UserRole {
  ADMIN = 'admin',
  USER = 'user',
}

class ExampleDto {
  @IsEnum(UserRole)
  role: UserRole;
}

 

10. @IsDate()

  • 날짜 값인지 검증 (Date 객체만 허용됨)
import { IsDate } from 'class-validator';

class ExampleDto {
  @IsDate()
  birthDate: Date;
}

 

11. @IsUrl()

  • URL 형식인지 검증
import { IsUrl } from 'class-validator';

class ExampleDto {
  @IsUrl()
  website: string;
}

 

12. @Length(min, max)

  • 문자열 길이를 제한

import { Length } from 'class-validator';

class ExampleDto {
  @Length(3, 10)
  username: string; // 최소 3자, 최대 10자
}

 

13. @Min(value) & @Max(value)

  • 최소값과 최대값 제한
import { Min, Max } from 'class-validator';

class ExampleDto {
  @Min(18)
  @Max(65)
  age: number;
}

 

14. @Matches(regex)

  • 정규식을 사용하여 값 검증
import { Matches } from 'class-validator';

class ExampleDto {
  @Matches(/^[a-zA-Z0-9]+$/)
  username: string; // 영문과 숫자만 허용
}

 

15. @ValidateNested()

  • 중첩된 객체의 유효성 검증 (객체 내부 필드도 검증하려면 @Type() 필요)
import { ValidateNested } from 'class-validator';
import { Type } from 'class-transformer';

class AddressDto {
  @IsString()
  street: string;

  @IsString()
  city: string;
}

class UserDto {
  @ValidateNested()
  @Type(() => AddressDto)
  address: AddressDto;
}

 

16. @ArrayNotEmpty()

  • 배열이 비어 있으면 안 됨
import { ArrayNotEmpty } from 'class-validator';

class ExampleDto {
  @ArrayNotEmpty()
  items: string[]; // 빈 배열 허용 안 됨
}

 

17. @IsUUID(version)

  • UUID 형식인지 검증
import { IsUUID } from 'class-validator';

class ExampleDto {
  @IsUUID()
  id: string;
}

 

18. @IsPositive() & @IsNegative()

  • 양수(@IsPositive()), 음수(@IsNegative())만 허용
import { IsPositive, IsNegative } from 'class-validator';

class ExampleDto {
  @IsPositive()
  positiveNumber: number;

  @IsNegative()
  negativeNumber: number;
}

 

19. @Allow()

  • 어떤 값이든 허용 (검증을 하지 않음)
import { Allow } from 'class-validator';

class ExampleDto {
  @Allow()
  extraField: any; // 어떤 값이든 허용
}

 

✅ 정리

  • class-validator를 활용하면 DTO에서 입력값 검증을 간단하게 처리 가능
  • @IsOptional()을 활용하면 필수 여부를 선택적으로 설정 가능
  • 다양한 검증 데코레이터를 조합하여 안전한 데이터 유효성 검사 구현 가능

 

about author

PHRASE

Level 60  라이트

만사를 돈독하게 하고 마음을 비워서 조용히 하는 건 인도(仁道)에 드는 근본이 된다. 장횡거(張橫渠)가 한 말. -근사록

댓글 ( 0)

댓글 남기기

작성