Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NodeJS map Dtos to TypeORM Entities

I have a nodejs REST API backend running the nestjs framework, using typeORM as ORM for my entities.

Coming from a C#/Entity Framework background, I am very used to have my Dtos mapped to the database entities.

Is there a similar approach with typeORM?

I have seen the automapper-ts library, but those magic strings in the map declarations look kind of scary... Basically it would be amazing if I could :

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

What is the way to do this (or any alternative with same result) in nodejs/typeorm backend environment?

like image 764
Aaron Ullal Avatar asked Jun 30 '18 09:06

Aaron Ullal


1 Answers

You can use class-transformer library. You can use it with class-validator to cast and validate POST parameters.

Example:

@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 and Expose here are from class-transform to avoid additional fields.

IsString, IsArray, IsOptional, IsInt, MaxLength are from class-validator.

ApiModelProperty is for Swagger documentation

And then

const skillDto = plainToClass(SkillNewDto, body);
const errors = await validate(skillDto);
if (errors.length) {
  throw new BadRequestException('Invalid skill', this.modelHelper.modelErrorsToReadable(errors));
}
like image 170
Alexey Petushkov Avatar answered Sep 30 '22 18:09

Alexey Petushkov