我使用的是带有NestJS的类验证器包,并且我希望验证一个对象数组,这些对象需要有两个具有相同布局的对象:
到目前为止,我已经:
import { IsString, IsNumber } from 'class-validator';
export class AuthParam {
@IsNumber()
id: number;
@IsString()
type: string;
@IsString()
value: string;
}和
import { IsArray, ValidateNested } from 'class-validator';
import { AuthParam } from './authParam.model';
export class SignIn {
@IsArray()
@ValidateNested({ each: true })
authParameters: AuthParam[];
}per @kamilg回复(我能够精确地执行两个元素):
import { IsArray, ValidateNested, ArrayMinSize, ArrayMaxSize } from 'class-validator';
import { AuthParam } from './authParam.model';
export class SignInModel {
@IsArray()
@ValidateNested({ each: true })
@ArrayMinSize(2)
@ArrayMaxSize(2)
authParameters: AuthParam[];
}我仍然可以通过一些与AuthParam无关的其他对象传递一个空数组或一个数组。
我应该如何修改它才能得到验证?
另外,我如何在数组中强制执行两个元素?MinLength(2)似乎是关于字符串的.(已解决)
发布于 2019-10-13 18:04:46
将@Type(() => AuthParam)添加到数组中,它应该可以工作。嵌套对象(数组)需要Type装饰器。你的代码变成
import { IsArray, ValidateNested, ArrayMinSize, ArrayMaxSize } from 'class-validator';
import { AuthParam } from './authParam.model';
import { Type } from 'class-transformer';
export class SignInModel {
@IsArray()
@ValidateNested({ each: true })
@ArrayMinSize(2)
@ArrayMaxSize(2)
@Type(() => AuthParam)
authParameters: AuthParam[];
}如果您使用任何异常筛选器来修改错误响应,请小心。确保您理解类验证器错误的结构。
发布于 2021-05-13 06:54:07
我知道我迟到了,但在Type上遇到了一些问题,然后尝试另一种方法来实现它:
export class AuthParam {
@IsNumber()
id: number;
@IsString()
type: string;
@IsString()
value: string;
}验证函数
@ValidatorConstraint()
export class IsAuthArray implements ValidatorConstraintInterface {
public async validate(authData: AuthParam[], args: ValidationArguments) {
return Array.isArray(authData) && authData.reduce((a, b) => a && (typeof b.id === "number") && typeof b.type === "string" && typeof b.field === "string", true);
}
}
export class SignInModel {
@IsNotEmpty()
@IsArray()
@ArrayMinSize(2)
@ArrayMaxSize(2)
@Validate(IsAuthArray, {
message: "Enter valid value .",
})
authParameters: AuthParam[];
}也许它会对某人有帮助
发布于 2019-10-11 16:25:57
您可以使用以下内容:
validator.arrayNotEmpty(array); // Checks if given array is not empty.
validator.arrayMinSize(array, min); // Checks if array's length is at least `min` number.
(https://github.com/typestack/class-validator#manual-validation)
您可能需要考虑编写自定义验证器,这样可以更好地反映您的业务需求。
https://stackoverflow.com/questions/58343262
复制相似问题