首页 > 解决方案 > NestJs:使用类验证器验证对象数组

问题描述

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

根据我的理解(如果我错了请纠正我),类验证器不支持直接验证数组。它需要我们创建一个包装类。

因此,以下是类:

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
    }
]}

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

标签: javascriptnode.jstypescriptnestjsclass-validator

解决方案


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

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

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

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


推荐阅读