使用 class-validator 和 Nest.js 验证对象数组
Posted
技术标签:
【中文标题】使用 class-validator 和 Nest.js 验证对象数组【英文标题】:Validate an array of objects with class-validator and Nest.js 【发布时间】:2022-01-19 01:47:30 【问题描述】:我正在使用带有 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 以获得必要的验证?
【问题讨论】:
【参考方案1】: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 和 Nest.js 验证对象数组的主要内容,如果未能解决你的问题,请参考以下文章
在 TypeScript 中使用 `class-validator` 确认密码
如何使用 NestJS 和 class-validator 手动测试输入验证
NestJS DTO 类设置 class-validator 和 class-transformer 执行顺序