使用 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-validator
和 class-transformer
混合来验证嵌套对象,你的 Array 也是一个嵌套对象,所以你可以这样验证:
import { Type } from 'class-transformer';
import { IsArray, ValidateNested } from 'class-validator';
class ItemsOfBet {
@IsArray()
@ValidateNested({ each: true })
@Type(() => CreateBetInput)
items: CreateBetInput[];
}
我将 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-validator
和 class-transformer
混合来验证嵌套对象,你的 Array 也是一个嵌套对象,所以你可以这样验证:
import { Type } from 'class-transformer';
import { IsArray, ValidateNested } from 'class-validator';
class ItemsOfBet {
@IsArray()
@ValidateNested({ each: true })
@Type(() => CreateBetInput)
items: CreateBetInput[];
}