본문으로 건너뛰기

필드 누락 처리

필드가 요청에 존재하지 않을 때(값이 undefined 또는 null), Express-Cargo는 어떻게 처리할지 알아야 합니다. 이 동작은 두 개의 데코레이터로 제어합니다.

  • @Default(value) — 대체 값을 채워 넣습니다.
  • @Optional() — "required" 오류를 발생시키지 않고 필드를 비워 둘 수 있게 합니다.

둘 다 "필드가 없을 때 무엇을 할지"라는 같은 것을 결정하므로 상호 배타적입니다. 같은 필드에 둘을 모두 적용하면 스키마 오류가 발생합니다.

필드에 두 데코레이터가 모두 작용되지 않고 값이 누락되면, 바인딩은 <field> is required 검증 오류로 실패합니다.

@Default(value: T)​

@Default 데코레이터는 요청이 값을 제공하지 않을 때 클래스 속성에 기본값을 할당합니다.

  • value: 필드가 요청에 존재하지 않을 때 할당할 기본값.
class Request {
@Body()
@Default(1)
price!: number;
}

기본값이 적용되는 시점​

기본값은 들어온 값이 undefined 또는 null일 때만(즉, 필드가 요청에 누락된 경우에만) 적용됩니다. 요청에서 들어온 그 외의 값은 그대로 유지됩니다.

즉, 0, '', false와 같은 falsy 값은 실제 입력으로 취급되어 기본값을 적용하지 않습니다..

class Request {
@Body()
@Default(10)
quantity!: number
}
들어온 quantity바인딩된 값
누락 / undefined10 (기본값 적용)
null10 (기본값 적용)
00 (유지)
55 (유지)

@Optional()​

@Optional 데코레이터는 필드를 선택 사항으로 표시하여, "required" 오류를 발생시키지 않고 필드를 생략하거나 undefined/null로 설정할 수 있도록 합니다. 필드가 누락되면 null로 남고, 해당 필드의 검증 규칙은 건너뜁니다.

class Request {
@Body()
@Min(0)
@Optional()
discount?: number
}

여기서 누락된 discount는 null로 바인딩되고 @Min(0) 규칙은 건너뜁니다. discount가 제공되면 정상적으로 검증됩니다.

@Default와 @Optional 중 선택​

필드 누락필드 제공
@Default(value)value로 바인딩값 유지 및 검증
@Optional()null로 바인딩값 유지 및 검증
둘 다 없음<field> is required 오류값 유지 및 검증

필드마다 하나의 전략을 선택하세요.

class Request {
// ❌ 잘못된 사용: 필드는 하나의 누락된 값 처리 전략만 사용할 수 있습니다.
@Body()
@Default(1)
@Optional()
price!: number
}