从nestjs ValidationPipe异常工厂中的类验证器获取最小约束

问题描述 投票:0回答:1

我想创建一个nestjs应用程序,并且希望能够自定义类验证器的消息,所以我创建了一个函数来获取我提供给消息的键,然后返回自定义的消息,问题是我想得到最小我向 DTO 中的

@Min
装饰器提供的值;但它不存在于我得到的错误对象中
exceptionFactory

这是 DTO:

class GetUsersDto {
  @ApiProperty({ required: false })
  @IsOptional()
  @Min(1, { message: 'validation.min' })
  @IsInt()
  @Transform((param) => parseInt(param.value, 10))
  page?: number;
}
  app.useGlobalPipes(
    new ValidationPipe({
      stopAtFirstError: true,
      whitelist: true,
      forbidNonWhitelisted: true,
      transform: true,
      exceptionFactory: (errors) => {
        console.log(errors);
        const result = errors
          .map((error) => {
            const key = Object.values(error.constraints)[0];
            const message = getMessage(key, error);
            return message ? message : getMessage('validation.400');
          })
          .join('');
        return new BadRequestException(result);
      },
    }),
  );

当我在异常工厂中记录错误时,我得到这样的信息:

[
  ValidationError {
    target: GetUsersDto { page: -1 },
    value: -1,
    property: 'page',
    children: [],
    constraints: { min: 'validation.min' }
  }
]

我需要的是获得我提供给

@Min
的最小值(这里是1),但我得到了
validation.min
。我怎样才能获得提供给
@Min
的值?.

我们可以使用上下文,但是在两个地方提供相同的值很容易出错,并且添加上下文会让装饰器有点混乱。

nestjs class-validator
1个回答
0
投票

您可以使用全局常量来表示该值。像这样:

const MIN_PAGE = 1

class GetUsersDto {
   @ApiProperty({ required: false })
   @IsOptional()
   @Min(MIN_PAGE , { message: 'the min value page is:' + MIN_PAGE })
   @IsInt()
   @Transform((param) => parseInt(param.value, 10))
   page?: number;
}

然后您就可以在任何您想要的地方使用该常量。您甚至可以使用单独的 constans.js 文件并将所有配置值存储在那里,然后将它们导入到您需要的任何地方。

© www.soinside.com 2019 - 2024. All rights reserved.