类转换器和类验证器:在类验证器错误中显示 @expose 名称

Jua*_*los 8 class-validator nestjs class-transformer

我有一个 NestJS 项目,其中同时使用类验证器和类转换器,并且我需要在类验证器抛出错误之前执行类转换器。

给定以下课程:

export class CreateProfileDto {
  @IsString()
  @Expose({ name: 'name' })
  profileName!: string;

  @IsBoolean()
  @Expose({ name: 'active'})
  profileActive!: boolean;
}
Run Code Online (Sandbox Code Playgroud)

我需要用属性名称而不是属性 profileName 来公开错误,其他属性也是如此。

有什么直接的想法来管理这个吗?无法要求前端向我发送具有不同名称的属性,这就是我需要调整它们的原因。

我想通过管道来做到这一点,但在错误爆发之前无法使用它。

当前错误格式:

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": [
        {
            "target": {
                "profileName": 1
            },
            "value": 1,
            "property": "profileName",
            "children": [],
            "constraints": {
                "isString": "profileName must be a string"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

所需的错误格式:

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": [
        {
            "target": {
                "name": 1
            },
            "value": 1,
            "property": "name",
            "children": [],
            "constraints": {
                "isString": "name must be a string"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

小智 0

ValidationOptions这意味着一些额外的工作,但您可以通过将对象传递给装饰器来个性化错误消息

export class CreateProfileDto {
  @IsString({ message: 'name must be a string' })
  @Expose({ name: 'name' })
  profileName!: string;
}
Run Code Online (Sandbox Code Playgroud)

传递函数也是一种选择:

export class CreateProfileDto {
  @IsString({ message: () => 'name must be a string' })
  @Expose({ name: 'name' })
  profileName!: string;
}
Run Code Online (Sandbox Code Playgroud)