24s*_*ron 6 mapping rest node.js nestjs
在我的应用程序中,我需要从实体(数据库模型)到 DTO(本地对象)的多次映射
大多数时候,D 与实体具有相同的名称
例如实体
export class CompanyModel extends BaseEntity {
constructor(init?: Partial<CompanyModel>) {
}
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ length: 500 })
name: string;
@Column({ length: 500, unique: true })
email: string;
....
}
Run Code Online (Sandbox Code Playgroud)
数据传输组织
export class Company {
@ApiProperty()
id: string;
@ApiProperty()
email: string;
@ApiProperty()
name: string;
...
}
Run Code Online (Sandbox Code Playgroud)
现在我添加静态函数toModel和fromModel
static toModel(companyDto :CreateCompanyDto ) : CompanyModel {
const companyModel = new CompanyModel();
const {name, email,..... } = companyDto;
companyModel.name = name;
companyModel.email =email
.....
return companyModel;
}
Run Code Online (Sandbox Code Playgroud)
在nestjs/node中将DTO映射到ENTITY的最佳解决方案是什么
csa*_*int 12
好吧,这取决于您还计划用 dto 做什么其他事情。在我的应用程序中,我在我的 dto-s 上进行了大量的预处理或后处理。这是一个示例,我想限制电子邮件属性的格式:
export class Company {
@ApiProperty()
id: string;
@ApiProperty()
@Transform(value => value.toLowerCase())
email: string;
@ApiProperty()
name: string;
...
}
Run Code Online (Sandbox Code Playgroud)
如果您打算使用这些转换,我建议使用class-transformer :方法,这样您就可以安全有效classToPlain地plainToClass将数据从 dto 对象转换为实体实例。您甚至可以对两个类进行不同的转换。
static toModel(companyDto: CreateCompanyDto ): CompanyModel {
const data = classToPlain(companyDto);
return plainToClass(CompanyModel, data);
}
Run Code Online (Sandbox Code Playgroud)
您可以在我上面提到的链接上找到更多信息。它甚至可以帮助您了解如何控制 dto 上的属性或如何根据不同的用例更改其行为。
| 归档时间: |
|
| 查看次数: |
21734 次 |
| 最近记录: |