我的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个元素处断裂而不是之前?
1条答案
按热度按时间bn31dyow1#
当列表中的项目超过21个时,NestJS似乎将数组转换为对象。解决方法是在DTO中使用
Object.values(labelIds)
,然后它应该可以正常工作。