Javascript NestJS中键值对对象的ValidationPipe
我的NestJS控制器中有以下DTO对象作为请求主体的一部分: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
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;