使用 class-validator 和 Nest.js 验证对象数组

Validate an array of objects with class-validator and Nest.js

我将 class-validator 与 NestJS 一起使用,并尝试使用以下布局验证对象数组:

[
    {gameId: 1, numbers: [1, 2, 3, 5, 6]},
    {gameId: 2, numbers: [5, 6, 3, 5, 8]}
]

我的解析器

createBet(@Args('createBetInput') createBetInput: CreateBetInput) {
    return this.betsService.create(createBetInput);
  }

我的 createBetInput DTO

import { InputType, Field, Int } from '@nestjs/graphql';
import { IsArray, IsNumber } from 'class-validator';

@InputType()
export class CreateBetInput {
  @IsNumber()
  @Field(() => Int)
  gameId: number;

  @Field(() => [Int])
  @IsArray()
  numbers: number[];
}

我尝试了一些解决方案,但没有成功,老实说,我不知道该怎么做。

如何修改 DTO 以获得必要的验证?

有选项 class-validatorclass-transformer 混合来验证嵌套对象,你的 Array 也是一个嵌套对象,所以你可以这样验证:

import { Type } from 'class-transformer';
import { IsArray, ValidateNested } from 'class-validator';

class ItemsOfBet {
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => CreateBetInput)
  items: CreateBetInput[];
}