繁体   English   中英

在验证可选字段时,如何允许 null 值?

[英]How can I allow a null value when validating an optional field?

我正在尝试制作三明治。 当所有值都传递给 Nest 时,一切正常 我遇到麻烦的地方是将 null (空字符串)传递给枚举,这是正确的,验证失败。

// successful
const sandwich = {
    name: 'Turkey',
    ...
    pricing: {
        requirePayment: true,
        default: {
            value: 2000,
            unit: 'whole',
        }
    }
} 

// fails validation
const sandwich = {
    name: 'Turkey',
    ...
    pricing: {
        requirePayment: false,  // AKA free sandwich
        default: {
            value: "",
            unit: "",
        }
    }
} 

// create-sandwich.dto.ts

@ApiProperty({
    description: '',
    example: '',
  })
  @ValidateNested({
    each: true,
  })
  @Type(() => PricingInterface)
  @IsNotEmpty()
  readonly pricing: PricingInterface;
// pricing.interface.ts

@ApiProperty({
    description: '',
    example: '',
  })
  @ValidateNested({
    each: true,
  })
  @Type(() => DefaultPricingInterface)
  @IsOptional()
  readonly default: DefaultPricingInterface;
// default-pricing.interface.ts

@ApiPropertyOptional({
    description: '',
    example: '',
  })
  @IsEnum(PriceUnit)
  @IsOptional()
  readonly unit: PriceUnit;  // WHOLE, HALF

@ApiPropertyOptional({
    description: '',
    example: '',
  })
  @IsNumber()
  @IsOptional()
  readonly value: number;

我得到的错误是:

“pricing.default.unit 必须是有效的枚举值”

我理解错误,但我不确定如何满足验证规则。 如果三明治是免费的,那么它就没有pricing.default.unit的值。 我已将该属性设置为可选,如果可能,我想保留验证。 如何允许unit为空字符串?

感谢您的任何建议!

@IsOptional()表示nullundefined ,不是空字符串。 传递nullundefined ,或完全省略该字段,而不是传递空字符串将解决问题。 您甚至可以完全省略default字段,因为您还为default声明@IsOptional()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM