我有一个rest调用,它可能接收类型classA或classB的主体。我需要将它作为2个不同的类。示例-
// classes -
class ClassA {
@IsString()
@Length(1, 128)
public readonly name: string;
@IsString()
@Length(1, 128)
public readonly address: string;
}
class ClassB {
@IsString()
@Length(1, 10)
public readonly id: string;
}
// my request controller -
@Post('/somecall')
public async doSomething(
@Body(new ValidationPipe({transform: true})) bodyDto: (ClassA | ClassB) // < not validating any of them..
): Promise<any> {
// do something
}
问题是,当有多个类时,body不被验证。
我如何使用2个或多个类,并使用类验证器验证它们?* 我不想使用同一个类.. *
谢谢大家:)
3条答案
按热度按时间olhwl3o21#
那么这就不可能了,至少Nest内置的
ValidationPipe
不可能。Typescript不反映联合、交集或其他类型的泛型类型,所以这个参数没有返回元数据,如果没有可操作的元数据,Nest将跳过管道。你可以创建一个自定义管道来为你做验证,如果你有两个类型,你可能必须这样做。你仍然可以在类内部调用适当的
class-transformer
和class-validator
方法。yzckvree2#
0sgqnhkj3#
遇到了类似的情况,我必须验证一些联合类型请求。
我最终得到的解决方案是一个自定义管道,正如JayMcDoniel在这里建议的那样。逻辑会根据您正在处理的请求主体而变化,但是根据问题,下面的方法可能有效
定制管道:
控制器使用情况: