验证 class:如果字段存在则验证失败
Validate class: Fail validation if field is present
我有一个例子 class (https://github.com/typestack/class-validator#validation-messages)。我创建了一个应该执行正常验证的函数,或者,如果指定,则执行失败的验证,如果 title
字段包含在正在验证的实例中。
import {MinLength, MaxLength, validate} from "class-validator";
export class Post {
@IsString()
body: strong;
@IsString()
title: string;
public async validatePost(isTitle){
// if we want the title to be included in the instance, do normal validation
if(isTitle) {
validate(this, { forbidUnknownValues: true, validationError: { target: false } });
}
// if a title is provided, fail validation
else {
// TODO: How can I fail validation if `title` is part of the instance?
}
}
}
我知道当存在非白名单属性 (https://github.com/typestack/class-validator#whitelisting) 时我可能会抛出错误,但我似乎无法弄清楚如何在存在字段时有条件地使验证失败。如果不创建自定义装饰器,这甚至可能吗?
有几种选择:
您可以添加一个条件:https://github.com/typestack/class-validator#conditional-validation
@ValidateIf(o => o.otherProperty === "value")
@Equals(undefined)
title: string;
如果您希望它始终未定义:
@Equals(undefined)
title: string;
如果您使用 class-transformer
,您可以将其标记为 @Excluded
,这样无论发送什么值都不会设置到该字段。
@Exclude({ toPClassOnly: true })
title: string;
我有一个例子 class (https://github.com/typestack/class-validator#validation-messages)。我创建了一个应该执行正常验证的函数,或者,如果指定,则执行失败的验证,如果 title
字段包含在正在验证的实例中。
import {MinLength, MaxLength, validate} from "class-validator";
export class Post {
@IsString()
body: strong;
@IsString()
title: string;
public async validatePost(isTitle){
// if we want the title to be included in the instance, do normal validation
if(isTitle) {
validate(this, { forbidUnknownValues: true, validationError: { target: false } });
}
// if a title is provided, fail validation
else {
// TODO: How can I fail validation if `title` is part of the instance?
}
}
}
我知道当存在非白名单属性 (https://github.com/typestack/class-validator#whitelisting) 时我可能会抛出错误,但我似乎无法弄清楚如何在存在字段时有条件地使验证失败。如果不创建自定义装饰器,这甚至可能吗?
有几种选择:
您可以添加一个条件:https://github.com/typestack/class-validator#conditional-validation
@ValidateIf(o => o.otherProperty === "value")
@Equals(undefined)
title: string;
如果您希望它始终未定义:
@Equals(undefined)
title: string;
如果您使用 class-transformer
,您可以将其标记为 @Excluded
,这样无论发送什么值都不会设置到该字段。
@Exclude({ toPClassOnly: true })
title: string;