乐闻世界logo
搜索文章和话题

如何在validationif装饰器nestjs类验证器中使用else条件?

1 个月前提问
1 个月前修改
浏览次数6

1个答案

1

在NestJS的类验证器(class-validator)中,@ValidateIf() 装饰器通常用来在某些条件下应用验证规则。如果需要在某条件不满足时应用其他验证规则(即所谓的“else”条件),我们通常需要使用另一个@ValidateIf()来指定这个条件的反向逻辑。

以下是一个简单的例子来说明这一点:

假设我们有一个用户注册的功能,其中用户需要提供emailphoneNumber中的至少一个,我们将使用@ValidateIf()来确保如果未提供email,则phoneNumber必须有效,反之亦然。

typescript
import { IsEmail, ValidateIf, IsMobilePhone } from 'class-validator'; export class RegisterDto { @ValidateIf(o => !o.phoneNumber) @IsEmail() email?: string; @ValidateIf(o => !o.email) @IsMobilePhone() phoneNumber?: string; }

在这个例子中:

  • 第一个@ValidateIf()装饰器检查phoneNumber是否未被提供,如果未提供,那么email字段必须符合邮箱格式。
  • 第二个@ValidateIf()装饰器检查email是否未被提供,如果未提供,那么phoneNumber字段必须是一个有效的手机号。

这样,我们就间接实现了“如果...则...否则...”的逻辑,确保了用户至少提供了其中一个联系方式,并且所提供的信息是有效的。这种方法在处理复杂的条件验证逻辑时非常有用,能够灵活地对数据进行校验。

2024年8月16日 02:31 回复

你的答案