gpt4 book ai didi

mongodb - 将数据传递给服务时在 Controller 中验证 DTO

转载 作者:行者123 更新时间:2023-12-04 15:25:50 28 4
gpt4 key购买 nike

我正在尝试将验证插入到 PUT 请求中(以更新存储在 MongoDB 中的一些数据):

DTO:

export enum reportFields {
'startDate',
'targetDateOfCompletion',
'duration',
}


export class updateScheduleDto {
@IsOptional()
@IsString()
readonly frequency?: string;

@IsOptional()
@IsArray()
@IsEmail({}, { each: true })
@IsString({ each: true })
readonly emails?: string[];

@IsOptional()
@IsEnum(reportFields, { each: true })
@IsArray()
@IsString({ each: true })
readonly reportFields?: string[];

@IsOptional()
@Type(() => Number)
@IsNumber()
updatedAt?: number;
}

Controller :

@Put('reports/:id/schedule')
async updateScheduleData(
@Param('id') id: string,
@Body(new ValidationPipe()) updateData: updateScheduleDto,
) {
return this.reportService.updateScheduleData(id, updateData);
}

服务:

 async updateScheduleData(id: string, updateData: updateScheduleDto) {
try {
updateData.updatedAt = this.utils.getCurrentTime();
const newData = await this.reportScheduleModel.findByIdAndUpdate(
id,
updateData,
{
new: true,
},
);

console.log(`Data has been updated to ${newData}`);
return newData;
} catch (error) {
throw new Error('>>>' + error);
}
}

但验证不适用于 key 。如果我在 body 对象中传递了一个无效的键(如下所示),即使程序执行时没有任何错误,我该如何解决这个问题?我错过了什么?

{
"emaaaalls":["randomemail123@gmail.com"]
}

最佳答案

您需要将选项 { forbidUnknownValues: true } 传递给 ValidationPipe。这将使 class-validator 在传入未知值时抛出错误。You can read through the options here

关于mongodb - 将数据传递给服务时在 Controller 中验证 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62266687/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com