我正在尝试将验证插入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"}
]
我收到了空数组。我究竟做错了什么?错误在哪里?
当我将控制器中的设置从SettingArrayUpdateD更改为任何设置时,控制器接收到原始请求数据。
NestJs 6.10.14版本。
答案 0 :(得分:0)
使用SettingArrayUpdateDto
类的定义,您需要发送与之完全匹配的有效负载。这意味着您的有效载荷必须为
{
"items": [
{"id": -20, "value": {"name": "333"}},
{"id": 21, "value": "2222222222222222"}
]
}
因为SettingArrayUpdateDto
具有items
类型的SettingUpdateDto[]
属性。
答案 1 :(得分:0)
要验证数组,请创建一个专用类,其中包含包装该数组的属性,或使用ParseArrayPipe
。
@Post()
createBulk(
@Body(new ParseArrayPipe({ items: CreateUserDto }))
createUserDtos: CreateUserDto[],
) {
return 'This action adds new users';
}