序列化(Serialization)是一个在网络响应中返回对象前的过程。 这是一个适合转换和净化要返回给客户的数据的地方。例如,应始终从最终响应中排除敏感数据(如用户密码)。此外,某些属性可能需要额外的转换,比方说,我们只想发送一个实体的子集。手动完成这些转换既枯燥又容易出错,并且不能确定是否覆盖了所有的情况。
安装
npm install class-transformer
npm install typeorm
排除、暴露、转换等属性
cats.entity.ts
import { PrimaryGeneratedColumn, Column, Entity } from 'typeorm';
import { Exclude, Expose } from 'class-transformer';
@Entity()
export class Cats {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 45 })
name: string;
@Exclude() // 排除掉该字段
@Column('int')
age: number;
@Expose()
get hello(): string {
return `hello ${this.name}.`; // 暴露出一个计算属性
}
@Transform(role => role.name); //转换:返回name名称,而不是返回整个RoleEntity对象
role: RoleEntity;
constructor(partial: Partial<Cats>) {
Object.assign(this, partial);
}
}
在控制器返回时做处理
import { ClassSerializerInterceptor, Controller, Get, UseInterceptors } from '@nestjs/common';
import { CatsService } from './cats.service';
import { Cats } from './cats.entity';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@UseInterceptors(ClassSerializerInterceptor)
@Get()
getHello() :Cats[]{
return (this.catsService.findAll()).map(el => new Cats(el));
}
}
cats.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
findAll() {
return [{id:123,name:'leolee',age:45},{id:1231,name:'leolee1',age:451}];
}
}