NodeJS NestJS查询参数数组有长度限制?

bvjxkvbb  于 2023-02-12  发布在  Node.js
关注(0)|答案(1)|浏览(233)

我的NestJS服务器中有一个端点,它将DTO作为@Query参数。

import { Type } from 'class-transformer';
import { IsArray, IsOptional, IsString, IsNumber } from 'class-validator';

export class BasicFiltersDTO {

  @IsArray()
  @IsOptional()
  @IsNumber({}, { each: true })
  @Type(() => Number)
  labelIds?: Array<number>;
  
  ... other fields
}

我在main.ts中注册了验证管道:

app.useGlobalPipes(new ValidationPipe({ transform: true }));

一切正常,直到我试图传递一个长度超过21个元素的数组:

由于某些原因,NestJS无法将其解析为一个数字数组,而只是放置了一个普通的javascript对象,其中键是索引
端点的url如下所示:http://localhost:3000/myEndpoint?labelIds[0]=217&labelIds[1]=216&labelIds[2]=214&labelIds[3]=215&labelIds[4]=213&labelIds[5]=212&labelIds[6]=208&labelIds[7]=211&labelIds[8]=207&labelIds[9]=204&labelIds[10]=200&labelIds[11]=203&labelIds[12]=199&labelIds[13]=196&labelIds[14]=192&labelIds[15]=195&labelIds[16]=191&labelIds[17]=190&labelIds[18]=186&labelIds[19]=187&labelIds[20]=182&labelIds[21]=183&labelIds[22]=179&labelIds[23]=176&labelIds[24]=175
我不知道这是怎么回事,为什么它会在22个元素处断裂而不是之前?

bn31dyow

bn31dyow1#

当列表中的项目超过21个时,NestJS似乎将数组转换为对象。解决方法是在DTO中使用Object.values(labelIds),然后它应该可以正常工作。

相关问题