【问题标题】:NestJs: Validating array of objects using class-validatorNestJs:使用类验证器验证对象数组
【发布时间】:2021-03-09 12:50:54
【问题描述】:

我正在尝试对数组的每个项目进行验证。

据我了解(如有错误请指正),class-validator 不支持直接验证数组。它需要我们创建一个包装类。

所以,以下是类:

export class SequenceQuery {   
    @MinLength(10, {
        message: 'collection name is too short',
      })
    collection: string;
    identifier: string;
    count: number;
}
export class SequenceQueries{
    @ValidateNested({ each: true })
    queries:SequenceQuery[];
}

以下是我的控制器:

  @Get("getSequence")
  async getSequence(@Body() query:SequenceQueries) {
    return await this.sequenceService.getNextSequenceNew(query)
  }

以下是我传递给控制器​​的 JSON:

{"queries":  [
    {
        "collection": "A",
        "identifier": "abc",
        "count": 1
    },
    {
        "collection": "B",
        "identifier": "mno",
        "count": 5
    },
    {
        "collection": "C",
        "identifier": "xyz",
        "count": 25
    }
]}

但它似乎不起作用。它不会抛出任何验证消息。

【问题讨论】:

    标签: javascript node.js typescript nestjs class-validator


    【解决方案1】:

    我找到了问题的解决方案。

    我应该将我的包装类更改为:

    export class SequenceQueries{
        @ValidateNested({ each: true })
        @Type(() => SequenceQuery) // added @Type
        queries:SequenceQuery[];
    }
    

    但我会留下这个问题,以防万一有人有替代解决方案,例如不必制作包装类。

    【讨论】:

      【解决方案2】:

      class-validator 确实支持数组验证,您只需添加您已经在 @ValidateNested({ each: true }) 中执行的操作,您只需将每个添加到集合元素:

      export class SequenceQuery {   
      @MinLength(10, {
          each: true,
          message: 'collection name is too short',
        })
      collection: string;
      identifier: string;
      count: number;
      

      }

      来源Validation Array

      【讨论】:

        猜你喜欢
        • 2019-05-16
        • 2021-04-22
        • 2022-08-02
        • 2022-01-05
        • 2018-08-21
        • 2021-02-03
        • 2022-01-10
        • 2019-08-29
        • 2020-09-09
        相关资源
        最近更新 更多