我正在为使用Nest.js的用户构建一个CRUD
我想让POST和PATCH接收相同的DTO,但在PATCH中有一些可选字段,但在POST中是强制性的。
我找不到一种方法来做到这一点,除了保持所有属性@IsOptional,并手动在代码中为POST请求编写验证
是否有更好的方法使用类验证器?
NestJS为你的问题提供了一个漂亮的解决方案,
您可以使用PartialType
,创建具有相同字段的类型,但每个字段都是可选的,使用PartialType()将类引用(PsotDto)作为参数:
export class PatchDto extends PartialType(PostDto) {}
你可以尝试@ValidateIf条件验证
如果ValidateIf返回true
,则其他验证将运行
示例:在这种情况下,如果o.otherProperty === 'value'
,那么@IsNotEmpty
将运行,否则它将不运行
export class Post {
otherProperty: string;
@ValidateIf(o => o.otherProperty === 'value')
@IsNotEmpty()
example: string;
}
您可以使用Custom validation classes
,因为nestjs使用了它,所以你也可以创建它。