Dto到实体和dto从实体

Dto to entity and dto from entity

在我的应用程序中,我需要多次从实体(数据库模型)映射到 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;




  ....

}

DTO

export class Company {
  @ApiProperty()
  id: string;


  @ApiProperty()
  email: string;

  @ApiProperty()
  name: string;
...
}

现在我添加静态函数 toModelfromModel

  static toModel(companyDto :CreateCompanyDto ) : CompanyModel {
    const companyModel =  new CompanyModel();

    const {name, email,..... } = companyDto;
    companyModel.name = name;
    companyModel.email =email
   
.....
    return companyModel;
}

在 nestjs/node 中将 DTO 映射到 ENTITY 的最佳解决方案是什么

好吧,这取决于您还计划用您的 dto 做些什么。在我的应用程序中,我对我的 dto-s 进行了大量预处理或 post 处理。这是一个例子,我想限制电子邮件的格式 属性:

export class Company {
  @ApiProperty()
  id: string;

  @ApiProperty()
  @Transform(value => value.toLowerCase())
  email: string;

  @ApiProperty()
  name: string;
...
}

如果你打算使用这些转换,我建议使用 class-transformer: classToPlain, plainToClass 方法,这样你就可以安全有效地从 dto 对象转换你的数据到一个实体实例。您甚至可以对 类.

进行不同的转换
static toModel(companyDto: CreateCompanyDto ): CompanyModel {
  const data = classToPlain(companyDto);
  return plainToClass(CompanyModel, data);
}

您可以在我上面提到的 link 上找到更多信息。它甚至可以帮助您 control the properties on your dtos or how to change their behaviour 基于不同的用例。