1

我正在尝试将验证插入 PUT 请求。

DTO:

export class SettingUpdateDto implements ISettingUpdate {
    @IsInt()
    @IsPositive()
    id: number;

    @IsNotEmpty()
    @IsString()
    value: string;
}

export class SettingArrayUpdateDto {
    @Type(() => SettingUpdateDto)
    @ValidateNested({ each: true })
    items: SettingUpdateDto[];
}

控制器

@Put()
async updateItem(@Body() items: SettingArrayUpdateDto) {
    return await this.dataService.update(items);
}

服务

async update(items: SettingArrayUpdateDto[]): Promise<Setting> {
    console.log("service data", items);
    return <Setting>{}; <SettingUpdateDto[]>items;
}

当我发送数据时,如下所示:

[
    {"id": -20, "value": {"name": "333"}},
    {"id": 21, "value": "2222222222222222"}
]

我收到了空数组。我究竟做错了什么?错误在哪里?

当我将控制器中的设置从 SettingArrayUpdateDto 更改为任何时,控制器会收到原始请求数据。

NestJs 6.10.14 版本。

4

2 回答 2

6

要验证数组,请创建一个包含包装数组的属性的专用类,或使用ParseArrayPipe.

@Post()
createBulk(
  @Body(new ParseArrayPipe({ items: CreateUserDto }))
  createUserDtos: CreateUserDto[],
) {
  return 'This action adds new users';
}
于 2020-12-17T23:40:09.083 回答
0

使用SettingArrayUpdateDto类的定义,您需要发送与其完全匹配的有效负载。这意味着您的有效载荷需要

{
  "items": [
    {"id": -20, "value": {"name": "333"}},
    {"id": 21, "value": "2222222222222222"}
  ]
}

因为SettingArrayUpdateDto具有itemstype 的属性SettingUpdateDto[]

于 2020-05-13T17:23:57.300 回答