类验证器 - 验证对象数组

2024-01-11

我正在使用带有 NestJS 的类验证器包,并且我希望验证需要恰好有 2 个具有相同布局的对象的对象数组:

到目前为止我有:

import { IsString, IsNumber } from 'class-validator';

export class AuthParam {
  @IsNumber()
  id: number;

  @IsString()
  type: string;

  @IsString()
  value: string;
}

and

import { IsArray, ValidateNested } from 'class-validator';
import { AuthParam } from './authParam.model';

export class SignIn {
  @IsArray()
  @ValidateNested({ each: true })
  authParameters: AuthParam[];
}

根据 @kamilg 回复(我能够执行 2 个元素):

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 无关的其他对象的数组。

我应该如何修改它以获得验证?

另外我如何在数组中强制执行 2 个元素? MinLength(2) 似乎与字符串有关...(已解决)


Add @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[];
}

如果您使用任何异常过滤器来修改错误响应,请务必小心。确保您了解类验证器错误的结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类验证器 - 验证对象数组 的相关文章

随机推荐