yal*_*man 9 validation typescript class-validator
假设有一个类 ,Post需要验证。
export class Post {
@IsArray()
tags: string[];
}
Run Code Online (Sandbox Code Playgroud)
现在假设他想确保“错误”一词永远不会出现在该tags字段中。他编写了一个自定义验证装饰器来执行此操作:
export function NoMistakes (validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'noMistakes',
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
validator: {
validate (tags: any, args: ValidationArguments) {
tags.forEach(tag => {
if (tag == 'mistake') {
return false;
}
});
return true;
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
现在,他改写Post如下:
export class Post {
@IsArray()
@NoMistakes()
tags: string[];
}
Run Code Online (Sandbox Code Playgroud)
例如,当标签类型不正确时,就会出现此问题int。在这种情况下,当尝试迭代非数组的内容时,自定义验证器中会发生错误。
如何让验证器@IsArray在自定义验证器之前执行?一般来说,有没有一种方法可以选择验证的顺序?
Typescript 装饰器顺序如下:参见
这意味着class-validator从下到上检查验证装饰器
因此,您可以Post像这样编辑您的类。
export class Post {
@NoMistakes() // 2nd
@IsArray() // 1st
tags: string[];
}
Run Code Online (Sandbox Code Playgroud)
并且您可以提供在出错时stopAtFirstError跳过的选项。
获取有关验证器选项的更多信息:https ://www.npmjs.com/package/class-validator#passing-options@NoMistakes()@IsArray