NodeJS将Dto映射到TypeORM实体

时间:2018-06-30 09:13:49

标签: node.js dto nestjs typeorm class-transformer

我有一个运行nodejs框架的nestjs REST API后端,对我的实体使用 typeORM 作为 ORM

来自C#/Entity Framework背景,我非常习惯于将Dto映射到数据库实体。

typeORM是否有类似的方法?

我已经看过automapper-ts库,但是地图声明中的那些魔术字符串看起来有些吓人... 基本上,如果我能做到,那就太神奇了:

let user: TypeORMUserEntity = mapper.map<TypeORMUserEntity>(userDto);

在nodejs / typeorm后端环境中如何执行此操作(或具有相同结果的任何替代方法)?

1 个答案:

答案 0 :(得分:3)

您可以使用class-transformer库。您可以将其与class-validator一起使用,以投射和验证POST参数。

示例:

@Exclude()
class SkillNewDto {
  @Expose()
  @ApiModelProperty({ required: true })
  @IsString()
  @MaxLength(60)
  name: string;

  @Expose()
  @ApiModelProperty({
    required: true,
    type: Number,
    isArray: true,
  })
  @IsArray()
  @IsInt({ each: true })
  @IsOptional()
  categories: number[];
}

ExcludeExpose来自class-transform,以避免附加字段。

IsStringIsArrayIsOptionalIsIntMaxLength来自class-validator

ApiModelProperty用于Swagger文档

然后

const skillDto = plainToClass(SkillNewDto, body);
const errors = await validate(skillDto);
if (errors.length) {
  throw new BadRequestException('Invalid skill', this.modelHelper.modelErrorsToReadable(errors));
}