Class 验证器自定义
Class Validator custom
大家好,我有一个关于 class 验证器的问题。我写了一个自定义的 class 验证器存在,它检查具有 属性 的对象是否已经存在。
这是代码
@Injectable()
@ValidatorConstraint({ async: true })
export class ExistsConstraint implements ValidatorConstraintInterface {
constructor(@InjectConnection() private connection: Connection) {
}
defaultMessage(validationArguments?: ValidationArguments): string {
return '';
}
validate(value: any, validationArguments?: ValidationArguments): Promise<boolean> | boolean {
const entity = validationArguments.constraints[0];
const isId = validationArguments.constraints[1];
const property = validationArguments.property;
const exists = (result) => {
return !!result;
};
const repository: Repository<any> = this.connection.getRepository(entity);
return isId ? repository.findOne(value).then(exists) : repository.findOne({[property]: value}).then(exists);
}
}
export function Exists(entity, isObjectId?, validationOptions?: ValidationOptions) {
return function(object: Object, propertyName: string) {
registerDecorator({
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
constraints: [entity, isObjectId],
validator: ExistsConstraint,
});
};
}
当我想用id抓取用户时很有用,像这样。
export class FindByIdParam{
@IsString()
@IsMongoId()
@Exists(User,true)
id: string;
}
但我认为它也可以有不同的用法,例如在尝试创建用户时检查使用此类电子邮件的用户是否已经注册。
这就是问题所在:当具有 属性 的实体存在时,此验证器 return 为真,我如何(在某些情况下)获得 !validator。我的意思是当实体不存在时它将 return 为真?有没有办法用这个验证器实现这个?
不幸的是,没有这样的方法,这就是为什么在他们的文档中他们为每种情况提供了 2 个装饰器。
@Equals
@NotEquals
@IsEmpty
@IsNotEmpty
@IsIn
@IsNotIn
等等
你可以做的 - 是共享代码库,例如使用这个 class 作为相反情况的基础 class 并简单地反转它的超级方法的结果。
大家好,我有一个关于 class 验证器的问题。我写了一个自定义的 class 验证器存在,它检查具有 属性 的对象是否已经存在。 这是代码
@Injectable()
@ValidatorConstraint({ async: true })
export class ExistsConstraint implements ValidatorConstraintInterface {
constructor(@InjectConnection() private connection: Connection) {
}
defaultMessage(validationArguments?: ValidationArguments): string {
return '';
}
validate(value: any, validationArguments?: ValidationArguments): Promise<boolean> | boolean {
const entity = validationArguments.constraints[0];
const isId = validationArguments.constraints[1];
const property = validationArguments.property;
const exists = (result) => {
return !!result;
};
const repository: Repository<any> = this.connection.getRepository(entity);
return isId ? repository.findOne(value).then(exists) : repository.findOne({[property]: value}).then(exists);
}
}
export function Exists(entity, isObjectId?, validationOptions?: ValidationOptions) {
return function(object: Object, propertyName: string) {
registerDecorator({
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
constraints: [entity, isObjectId],
validator: ExistsConstraint,
});
};
}
当我想用id抓取用户时很有用,像这样。
export class FindByIdParam{
@IsString()
@IsMongoId()
@Exists(User,true)
id: string;
}
但我认为它也可以有不同的用法,例如在尝试创建用户时检查使用此类电子邮件的用户是否已经注册。 这就是问题所在:当具有 属性 的实体存在时,此验证器 return 为真,我如何(在某些情况下)获得 !validator。我的意思是当实体不存在时它将 return 为真?有没有办法用这个验证器实现这个?
不幸的是,没有这样的方法,这就是为什么在他们的文档中他们为每种情况提供了 2 个装饰器。
@Equals
@NotEquals
@IsEmpty
@IsNotEmpty
@IsIn
@IsNotIn
等等
你可以做的 - 是共享代码库,例如使用这个 class 作为相反情况的基础 class 并简单地反转它的超级方法的结果。