Serializer 提供了在返回响应之前的数据处理功能。比如像用户密码这种敏感数据不应该包含在响应里。一些属性可能需要转换一下。响应的实体数据可以只包含指定的属性,比如 id 还有 name。
Nest 提供的 ClassSerializerInterceptor 可以帮我们做这些事情,它用了 class-transformer 包提供的功能。ClassSerializerInterceptor 拿到方法返回的值以后会交给 class-transformer 包里提供的 classToPlain 方法。
排除属性
比如在实体里排除 password 属性:
import { Exclude } from 'class-transformer';
export class UserEntity {
id: number;
firstName: string;
lastName: string;
@Exclude()
password: string;
}使用:
@UseInterceptors(ClassSerializerInterceptor)
@Get()
findOne(): UserEntity {}返回的结果里面不会包含 password 属性。
Expose 属性
使用 @Expose 装饰器,提前处理一些属性。
@Expose()
get fullName(): string {
return `${this.firstName} ${this.lastName}`;
}转换
使用 @Transform() 装饰器可以转换数据。比如一个 RoleEntity,你只需要它的 name 属性:
@Transform(role => role.name) role: RoleEntity;
选项
转换选项可能会根据一些特定的情况有一些变化,覆盖默认的设置,可以使用 @SerializeOptions() 装饰器。
@SerializeOptions({
excludePrefixes: ['_'],
})
@Get()
findOne(): UserEntity {}这些选项会作为 classToPlain() 函数的第二个参数值。



