Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NestJS中键值对对象的ValidationPipe_Javascript_Typescript_Nestjs_Dto_Class Validator - Fatal编程技术网

Javascript NestJS中键值对对象的ValidationPipe

Javascript NestJS中键值对对象的ValidationPipe,javascript,typescript,nestjs,dto,class-validator,Javascript,Typescript,Nestjs,Dto,Class Validator,我的NestJS控制器中有以下DTO对象作为请求主体的一部分: export class UserPropertiesDto { [key: string]: boolean; } 例如:{campaignActive:true,metadataEnabled:false} 它是一个键值对对象,其中键是唯一的字符串,其值是一个布尔值 我想应用类验证器注释以确保正确的验证和转换,但它不断显示一个错误这里的装饰器无效: export class UserPropertiesDto { @I

我的NestJS控制器中有以下DTO对象作为请求主体的一部分:

export class UserPropertiesDto {
  [key: string]: boolean;
}
例如:
{campaignActive:true,metadataEnabled:false}

它是一个键值对
对象
,其中键是唯一的
字符串
,其值是一个
布尔值

我想应用
类验证器
注释以确保正确的验证和转换,但它不断显示一个错误
这里的装饰器无效

export class UserPropertiesDto {
  @IsOptional()
  @IsString() // `key` should be a string
  @MaxLength(20) // `key` should have no more than 20 characters
  @IsBoolean() // `value` has to be a `boolean`
  [key: string]: boolean;
}
请您就最佳方法提供建议:

  • 确保保留所有对象的属性
  • 验证密钥以确保其长度不超过20个字符
  • 验证值以确保它是一个
    布尔值

    • 我建议大家注意一下。在验证期间,它可以访问已验证对象的所有属性和值

      您可以将所有验证参数作为第二个参数传递,并在验证器内部使用它们来控制流

      导出类邮件{
      @验证(CustomTextLength{
      键类型:字符串,
      最大长度:20
      ...
      })
      标题:字符串;
      }
      
      我建议您使用自定义验证器,我尝试为您做一些工作:

      iskeyvalue-validator.ts

      要实现它,您必须在模块提供程序中添加IsKeyValueValidate:

      providers: [...,IsKeyValueValidate],
      
      在您的Dto中:

         @IsOptional()
        @Validate(IsKeyValueValidate, 
          [ { message:"Not valdiate!"}] )
        test: Object;
      

      谢谢只做了一些小改动,效果很好。不幸的是,这不允许使用严格类型,但也可以。
         @IsOptional()
        @Validate(IsKeyValueValidate, 
          [ { message:"Not valdiate!"}] )
        test: Object;