강의

멘토링

커뮤니티

Inflearn Community Q&A

purnsup903327's profile image
purnsup903327

asked

[Code Factory] [Beginner] NestJS REST API Backend Complete Conquest Master Class - NestJS Core

Generalizing Validation Messages

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

Written on

·

338

0

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

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

} else}{

}

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

 

javascripttypescriptrest-apinestjsbackend

Answer 2

0

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

경우에 따라서

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

@Length(0, max값, {})

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

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

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

질문자님 말씀대로 구현 하려면 (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

codefactory님의 프로필 이미지
codefactory
Instructor

안녕하세요!

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

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

예제 링크 보내드립니다.

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

감사합니다!

purnsup903327's profile image
purnsup903327

asked

Ask a question