NodeJS сопоставляет Dtos с сущностями TypeORM - PullRequest
0 голосов
/ 30 июня 2018

У меня есть nodejs REST API бэкэнд, работающий с фреймворком nestjs, использующим typeORM как ORM для моих сущностей.

Исходя из C#/Entity Framework фона, я очень привык, что мои Dtos сопоставлены с объектами базы данных.

Есть ли аналогичный подход с typeORM?

Я видел библиотеку automapper-ts , но эти магические строки в объявлениях карты выглядят довольно страшно ... В принципе, было бы замечательно, если бы я мог:

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

Как это сделать (или любой другой вариант с тем же результатом) в серверной среде nodejs / typeorm?

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете использовать библиотеку 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 для документации Swagger

А потом

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