인프런 커뮤니티 질문&답변

purnsup90님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Validation Message 일반화 하기

length에서 min값만 설정하고 싶을 때 max 없이 validationOptions을 어떻게 전달할 수 있나요..?

24.01.20 11:20 작성

·

202

0

length에서 max값을 전달 안해주고 min만 설정하고 싶을때

if(args.constraints.length===2){

} else}{

}

여기서 else 가 실행되어야 하는데 max 값 없이 validationOptions만을 전달하면 validationOptions가 두번째 인자로 전달되는 것 아닌가요..? 이렇게 하면 에러 나는데.. max 값에 undefined나 null을 넣어도 안되는 것 같습니다. 어떻게 max 값 없이 validationOptions를 실행할 수 있나요..?

 

답변 2

0

thunderblast님의 프로필 이미지

2024. 07. 29. 20:54

시간이 좀 지나서 이미 찾아서 사용중이실수도 있고 보실진 모르겠습니다만

경우에 따라서

@MinLength() 와 @MaxLength() 를 사용하실 수 있고,

@Length(0, max값, {})

@Length(min값, Number.MAX_VALUE, {})

등으로도 사용하실 수 있을 것 같습니다.

thunderblast님의 프로필 이미지

2024. 07. 29. 21:15

저도 강의 보면서 테스트 해 보니깐

질문자님 말씀대로 구현 하려면 (max를 지정하지 않은채로 @Length() 설정 )

@Length(2, undefined, {}) 으로 추가하는 경우

(args: ValidationArguments) 로 받아오는 인자의 args.constraints 가 [2, undefined] 이더라구요

max가 필요치 않은 조건이라면 @MinLength() 를 사용하는게 의도된 방식일 것 같지만, @Length() 하나만 사용해서 일반화 해서 사용하고 싶다면

이런식으로도 해결 할 수도 있을 것 같습니다!!

import { ValidationArguments } from 'class-validator';

export const lengthValidationMessasge = (args: ValidationArguments) => {
  const isOnlyMin =
    args.constraints.length < 2 || args.constraints[1] === undefined;
  if (isOnlyMin) {
    return `${args.property}는 최소 ${args.constraints[0]} 글자를 입력해주세요`;
  } else {
    return `${args.property}는 ${args.constraints[0]} ~ ${args.constraints[1]} 글자를 입력해주세요`;
  }
};

이 때 constraints가 0개나 1개인 케이스가 가능할지는 모르겠지만요

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 01. 21. 22:48

안녕하세요!

혹시 Min annotation을 찾고 계시는게 맞을까요?

@Min(최소값) <- 이렇게 사용 할 수 있습니다.

예제 링크 보내드립니다.

https://github.com/typestack/class-validator?tab=readme-ov-file#validating-promises

감사합니다!