在nestjs中使用类验证器验证可选参数?

Posted

技术标签:

【中文标题】在nestjs中使用类验证器验证可选参数?【英文标题】:Validation on optional Parameter using class-validator in nestjs? 【发布时间】:2019-08-29 12:07:30 【问题描述】:

我想对请求有效负载应用验证,例如,有字符串类型的字段名称。但name不是必填字段,但如果存在则必须执行@IsNotEmpty()

我尝试过这样的事情 @IsNotEmpty() name?: string // 不考虑 ? 可选约束

【问题讨论】:

【参考方案1】:

class-validator 有一个 @IsOptional() 验证器,您可以将其与您定义的任何其他验证器一起添加:

@IsOptional() @IsNotEmpty() name: string;

装饰器是可交换的,因此验证不依赖于验证器的顺序。如果验证的需要取决于存在以外的其他因素,您可以使用@ValidateIf(),它接受一个函数参数。

【讨论】:

【参考方案2】:

Kim 的回答很棒。如果您想将此行为应用于所有可选字段,您还可以将skipMissingProperties: true 与您的验证管道一起使用。

【讨论】:

你能举个例子说明在哪里放置这个属性?谢谢【参考方案3】:

您可以使用@IsOptional() 验证器:

检查给定值是否为空(=== null=== undefined),如果是,则忽略该属性上的所有验证器。

【讨论】:

以上是关于在nestjs中使用类验证器验证可选参数?的主要内容,如果未能解决你的问题,请参考以下文章

nestjs 中的可选身份验证

如何在 NestjS 中使用可选的 url 参数

ApiControllerAttribute 和可选参数

在 RAML 中验证查询参数

如何在打字稿中使用可选参数调用类构造函数[重复]

记一次线上问题排查:C#可选参数的坑