【问题标题】:How to validate a List of nested Objects in nest.js如何验证 nest.js 中的嵌套对象列表
【发布时间】:2021-06-30 21:35:04
【问题描述】:

我想验证嵌套对象@请求的列表:

export class Room {
  @ApiProperty()
  @IsNotEmpty()
  @IsString()
  name: string;

  @ApiProperty({ type: [RoomMate] })
  @IsNotEmpty()
  @IsArray()
  @ValidateNested({ each: true })
  roomMates: RoomMate[];
}

nest.js (https://github.com/typestack/class-validator#validating-arrays) 链接的文档只讨论嵌套对象,而不涉及嵌套对象列表

如果我执行上面的代码,它会说:

{
  "statusCode": 400,
  "message": [
    "0.an unknown value was passed to the validate function"
  ],
  "error": "Bad Request"
}

如果我删除“@ValidateNested({ each: true })”,它将不会被验证(您可以传递例如 Cats & Dogs 而不是 RoomMates)

有什么想法吗?

【问题讨论】:

    标签: arrays validation nestjs


    【解决方案1】:

    对于@ValidateNested,我发现您还需要指定@Type

      @ApiProperty({ type: [RoomMate] })
      @IsNotEmpty()
      @IsArray()
      @ValidateNested({ each: true })
      @Type(() => RoomMate)
      roomMates: RoomMate[];
    

    类验证器 README 示例假定您正在使用类,并且有 a section on validating plain objectsThis example in the class-transformer README 显示使用 @Type() 指定嵌套对象的类型。

    此外,请确保 RoomMate 是一个类,而不仅仅是一个 TypeScript 接口。

    有关更多信息,请参阅 class-validator 上的 this issue

    【讨论】:

    • 非常感谢 VEEEERRRY .... 是的,现在可以了。总共有 3 个模块,其中包含我选择的装饰器“Type”: import { Type } from 'class-transformer'; ...现在它可以工作了!
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多