我想对请求负载应用验证,例如,存在字符串类型的字段名称。但名称不是必填字段,但如果存在,则必须执行@IsNotEmpty()我尝试了类似于@IsNotEmpty() name?: string的方法//它没有考虑?可选约束
@IsNotEmpty()
@IsNotEmpty() name?: string
?
c6ubokkw1#
您可以使用@IsOptional()验证器:检查给定值是否为空(=== null,=== undefined),如果为空,则忽略属性上的所有验证器。
@IsOptional()
=== null
=== undefined
im9ewurl2#
class-validator有一个@IsOptional()验证器,您可以将其与您定义的任何其他验证器沿着添加,如下所示:
@IsOptional() @IsNotEmpty() name: string;
装饰器是可交换的,所以验证不依赖于验证器的顺序,如果验证依赖于存在以外的东西,你可以使用@ValidateIf(),它接受一个函数参数。
@ValidateIf()
c0vxltue3#
您可以使用@ValidateIf条件验证,如果函数返回true,则将运行其他验证示例:在这种情况下,如果o.otherProperty === 'value'等于true,则@IsNotEmpty将运行,否则将不运行
true
o.otherProperty === 'value'
@IsNotEmpty
export class Post { otherProperty: string; @ValidateIf(o => o.otherProperty === 'value') @IsNotEmpty() example: string; }
qni6mghb4#
Kim的回答非常好,如果您想将此行为应用于所有可选字段,也可以将skipMissingProperties: true与验证管道一起使用。
skipMissingProperties: true
4条答案
按热度按时间c6ubokkw1#
您可以使用
@IsOptional()
验证器:检查给定值是否为空(
=== null
,=== undefined
),如果为空,则忽略属性上的所有验证器。im9ewurl2#
class-validator有一个
@IsOptional()
验证器,您可以将其与您定义的任何其他验证器沿着添加,如下所示:装饰器是可交换的,所以验证不依赖于验证器的顺序,如果验证依赖于存在以外的东西,你可以使用
@ValidateIf()
,它接受一个函数参数。c0vxltue3#
您可以使用@ValidateIf条件验证,如果函数返回
true
,则将运行其他验证示例:在这种情况下,如果
o.otherProperty === 'value'
等于true
,则@IsNotEmpty
将运行,否则将不运行qni6mghb4#
Kim的回答非常好,如果您想将此行为应用于所有可选字段,也可以将
skipMissingProperties: true
与验证管道一起使用。