当我尝试更新嵌套对象的特定道具时,我在验证嵌套对象时遇到问题,例如:
import { Type } from 'class-transformer';
import { IsOptional, IsString, ValidateNested } from 'class-validator';
class Nested {
@IsString()
@IsOptional()
readonly propA: string;
@IsString()
@IsOptional()
readonly propB: string;
}
export class UpdateDto {
@IsOptional()
@Type(() => Nested)
@ValidateNested()
readonly nested: Nested;
}
如果我尝试像{ "nested.propA": "test" }
我一样传递一个虚线键,则会收到以下错误
{
"statusCode": 400,
"message": [
"property nested.propA should not exist"
],
"error": "Bad Request"
}
一个最简单的解决方案是在父对象中添加虚线键,例如:
class Nested {
@IsString()
@IsOptional()
readonly propA: string;
@IsString()
@IsOptional()
readonly propB: string;
}
export class UpdateDto {
@IsOptional()
@Type(() => Nested)
@ValidateNested()
readonly nested: Nested;
@IsString()
@IsOptional()
readonly 'nested.propA': string; <==== THIS
@IsString()
@IsOptional()
readonly 'nested.propB': string; <==== THIS
}
通过这种方法,我可以同时传递整个对象和单个道具,但这对我来说似乎真的是多余的。
使用“点”语法进行验证的任何其他方式?db 是mongo
点语法可用于更新嵌套对象的特定道具的地方。
谢谢。