🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

Nest.js:Serialization(文档)

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() 函数的第二个参数值。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点