mongodb - 将数据传递给服务时验证控制器中的 DTO
问题描述
我正在尝试在 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;
}
控制器:
@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);
}
}
但是验证无法通过密钥进行。如果我在 body 对象中传递了一个无效的键(如下所示),即使程序执行没有任何错误,我该如何解决这个问题?我错过了什么?
{
"emaaaalls":["randomemail123@gmail.com"]
}
解决方案
您需要将选项传递{ forbidUnknownValues: true }
给ValidationPipe
. 当传入未知值时,这将class-validator
引发错误。您可以阅读此处的选项
推荐阅读
- android - 如何在 Android 中保存和重新创建布局?
- c - 将大型 CSV 文件汇总到数组中的内存访问冲突
- java - 在某些情况下无法打印正确的结果
- solidity - 使用 web3 v1.0 发送原始交易的无效类型错误
- reactjs - React Router 5 不使用查询参数/状态重定向(剥离查询参数/状态)
- python - 如何使用 Python 制作字数计数器程序?
- c# - 从字符串 C# 中查找并提取一个数字
- c - 读取文件并将数据保存到二维数组中
- linear-programming - 如何线性化 AND 和 OR 约束的组合
- laravel - 调用数组上的成员函数 fill()