当我尝试为请求主体初始化验证管道时,给出无效类型不会发生任何事情。
当用户指定的值与我的DTO中的类型相反时,我将拒绝并出现错误。在这种情况下,我要求/ test的正文为
{ "string": true }
我希望这会出错,但不会。
import { IsString } from "class-validator";
export class TestDTO {
@IsString() public readonly string: string;
}
@Controller()
export class TestController {
@Post("/test")
public testing(@Body(new ValidationPipe()) test: TestDTO): string {
return test.string;
}
}
答案 0 :(得分:0)
当body包含boolean时,后端(nestjs)将其解析为字符串 有一个装饰器来验证参数是否具有布尔值作为字符串
@IsBooleanString()
myVariable:boolean;
你可以做什么:
您可以将 body 值从布尔值转换为数字
From { "string": true } To { "string": 1 }
您可以使用额外的 validate decorator,@IsNotIn(values: any[])
例子:
@IsString()
@IsNotIn(["FALSE", "TRUE"])
myVariable: string;
您可以创建您的own decorator
import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';
export function IsNotBoolean(validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'IsNotBoolean',
target: object.constructor,
propertyName: propertyName,
constraints: [],
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
if(value.toUpperCase() == 'TRUE' || value.toUpperCase() == 'FALSE'){
return false
} else {
return true
}
},
},
});
};
}
关于 DTO
import { IsString } from "class-validator";
import { IsNotBoolean } from "the path of your custom validate decorator"
export class TestDTO {
@IsString({myErrorKey:'My error message'})
@IsNotBoolean({the optional error message object})
string: string;
}
在控制器上
public testing(@Body(ValidationPipe) test: TestDTO): string {
return test.string;
}