1

当我尝试更新嵌套对象的特定道具时,我在验证嵌套对象时遇到问题,例如:

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点语法可用于更新嵌套对象的特定道具的地方。

谢谢。

4

0 回答 0