node.js - NestJs - 使用具有 2 个主体类选项的类验证器验证请求主体
问题描述
我有一个休息电话,它可能会收到 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
}
问题是,当有多个班级时,身体没有得到验证。
如何使用 2 个或更多类并使用类验证器验证它们? 我不想使用同一个类..
谢谢你们 :)
解决方案
我不想使用同一个类..
那么这是不可能的,至少对于 Nest 的内置ValidationPipe
. Typescript 不反映联合、交集或其他类型的泛型类型,因此该参数没有返回的元数据,如果没有可操作的元数据,Nest 将最终跳过管道。
您可能可以创建一个自定义管道来为您进行验证,如果您有两种类型,您可能必须这样做。您仍然可以在类内部调用适当的class-transformer
和class-validator
方法。
推荐阅读
- matlab - 使用 CPLEX/AMPL 解决 SOCP 问题的速度比使用 CPLEX/MATLAB 解决时快 10 倍,为什么?
- python - beautifulsoup4 一直打印无
- pytorch - torch.mul 导致 param.grad 为 NoneType
- android - 在 ACTION_BOOT_COMPLETED 之后,为什么 AlarmManager 会立即运行?
- javascript - 如何在不单击搜索按钮的情况下创建搜索功能?
- swiftui - 如何处理 swiftui @State optional unwrap
- python - 如何与 Open CV 中的 BGR 图像像素值进行比较?
- java - 使用@IdClass 休眠一个实体的@ManyToOne
- ios - 为什么这个 SwiftUI 代码会导致编译器超时
- javascript - 在 vuetify 2.x 组件上使用填充高度