我有一个运行nodejs
框架的nestjs
REST API后端,对我的实体使用 typeORM 作为 ORM 。
来自C#/Entity Framework
背景,我非常习惯于将Dto映射到数据库实体。
typeORM是否有类似的方法?
我已经看过automapper-ts库,但是地图声明中的那些魔术字符串看起来有些吓人... 基本上,如果我能做到,那就太神奇了:
let user: TypeORMUserEntity = mapper.map<TypeORMUserEntity>(userDto);
在nodejs / typeorm后端环境中如何执行此操作(或具有相同结果的任何替代方法)?
答案 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[];
}
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));
}