【发布时间】:2021-07-11 11:11:58
【问题描述】:
我有一个前端应用程序,它向我的后端应用程序发送一个带有以下 JSON 正文的 POST 请求
{
"principal": {
"name": "John Doe",
"birth": "1990-01-01T02:00:00.000Z",
"phone": "(12) 341 234 124",
"email": "test@test.com"
},
"companion": {
"name": "",
"birth": null,
"phone": "",
"email": ""
},
... // some other data
}
在我使用 NestJS 的后端应用程序中,由于 principal 和 companion 具有相同的属性,我映射到以下 DTO。
import { IsNotEmpty, IsString } from "class-validator";
export class NewDataDto {
principal: PersonDto;
companion: PersonDto;
// some other data
}
export class PersonDto {
@IsNotEmpty()
@IsString()
name: string;
birth?: Date;
@IsNotEmpty()
@IsString()
phone: string;
@IsNotEmpty()
@IsString()
email: string;
}
所以在principal 对象中,所有属性都是必需的,但在companion 对象中,所有属性都是可选的。由于两个对象的所有属性都相同,只有验证发生了变化,如何验证对两个对象使用相同的类?
【问题讨论】:
-
是的,我试过了。但是我有 2 个具有不同验证的对象属于同一类,因此
name必须在principal中是必需的,但在companion中可以为空。 -
为验证目的创建单独的类怎么样?
-
是的,我同意 Bruno 的观点,即最好将班级分开。并查看来自 Nest js docs.nestjs.com/openapi/mapped-types 的映射类型包
-
是的,这是一种解决方法。但是如此严重地违反了DRY 原则,以至于让我无法遵循这个解决方案。
标签: typescript nestjs class-validator