8

我有一个运行框架的nodejsREST API 后端,使用typeORM作为我的实体的ORMnestjs

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

typeORM 有类似的方法吗?

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

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

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

4

2 回答 2

6

您可以使用类变压器库。您可以将它与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这里Exposeclass-transform为了避免额外的字段。

IsString, IsArray, IsOptional, IsInt,MaxLength来自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));
}
于 2018-06-30T13:33:18.297 回答
0

我使用create的方法来自getRepository


export async function save(booking: createBookingDto) {
  const bookingRepository = getRepository(Booking);

  const bookingEntity = bookingRepository.create({ ...booking });
  return bookingRepository.save(bookingEntity);
}
于 2022-02-09T11:03:05.140 回答