代码之家  ›  专栏  ›  技术社区  ›  Aaron Ullal

nodejs将dto映射到typeorm实体

  •  2
  • Aaron Ullal  · 技术社区  · 6 年前

    我有一个 nodejs 运行 nestjs 框架,使用 类型 作为 ORM公司 为了我的实体。

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

    typeorm有类似的方法吗?

    我见过 automapper-ts 库,但是那些在地图声明中的神奇字符串看起来有点吓人… 基本上,如果我能:

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

    在nodejs/typeorm后端环境中,如何做到这一点(或任何具有相同结果的替代方案)?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Alexey Petushkov    6 年前

    你可以用 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[];
    }
    

    Exclude Expose 这是从 class-transform 以避免其他字段。

    IsString 我是说, IsArray 我是说, IsOptional ,请 IsInt 我是说, MaxLength 来自 class-validator 是的。

    ApiModelProperty 是为了虚张声势的文件

    然后

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