我正在为我正在使用的api写一个注册端点,并且我正在使用nestjs和class-validator来验证输入数据。 用户可以使用他们的电话号码或电子邮件地址或两者进行注册。因此,为了验证输入,我应该确保至少提供了其中之一。但是我很难弄清楚如何做而不弄乱。
这是我的dto:
export class register {
@ApiModelProperty()
@IsNotEmpty()
@IsAlpha()
firstName: string
@ApiModelProperty()
@IsNotEmpty()
@IsAlpha()
lastName: string
@ApiModelProperty()
@ValidateIf(o => o.email == undefined)
@IsNotEmpty()
@isIRMobile()
phone: string
@ApiModelProperty()
@ValidateIf(o => o.phone == undefined)
@IsNotEmpty()
@IsEmail()
email: string
@ApiModelProperty()
@IsNotEmpty()
password: string
}
如您所见,我使用了条件验证,这种验证适用于仅提供电话号码或电子邮件地址之一的情况。但是问题在于,如果同时提供了两者,则其中的一个将不被验证,并且将允许使用无效的值。
有什么建议吗?
答案 0 :(得分:1)
我认为您只需要添加
@ValidateIf(o => o.email == undefined || o.phone)
phone: string
和
@ValidateIf(o => o.phone == undefined || o.email)
email: string
已编辑
少量添加
我建议这样验证:
@ValidateIf(o => !o.email || o.phone)
phone: string
@ValidateIf(o => !o.phone || o.email)
email: string
正确处理 null , 0 和“” (空字符串)
否则,这也是正确的(不应该这样):
const data = new register();
data.phone = '';
data.email = '';