当前位置: 首页 > news >正文

VonaJS: 序列化/数据脱敏(上)

序列化/数据脱敏

VonaJS 提供了序列化能力,可以对 API 的响应数据进行转换,比如:排除密码字段,对 Email 和 Mobile 进行脱敏处理,等等

先介绍通用的序列化机制,再介绍一组工具函数。通过工具函数可以更加便利的使用序列化能力

创建Serializer Transform

比如,在模块 demo-student 中创建一个 Serializer Transform: upper,将字段值转化为大写

1. Cli命令

$ vona :create:bean serializerTransform upper --module=demo-student

2. 菜单命令

::: tip
右键菜单 - [模块路径]: Vona Bean/Serializer Transform
:::

Serializer Transform定义

export type TypeSerializerTransformUpperValue = string;export type TypeSerializerTransformUpperData = unknown;export type TypeSerializerTransformUpperResult = TypeSerializerTransformUpperValue;export interface ISerializerTransformOptionsUpper extends IDecoratorSerializerTransformOptions {}@SerializerTransform<ISerializerTransformOptionsUpper>()
export class SerializerTransformUpper extends BeanBase {async transform(value: TypeSerializerTransformUpperValue,_data: TypeSerializerTransformUpperData,_options: ISerializerTransformOptionsUpper,): Promise<TypeSerializerTransformUpperResult> {return value.toUpperCase();}
}
  • TypeSerializerTransformUpperValue: 定义字段类型
  • TypeSerializerTransformUpperData: 定义外层 object 对象类型
  • TypeSerializerTransformUpperResult: 定义结果类型
  • transform: 将字段值转为大写

使用Serializer Transform

比如学生 APIfindOne方法返回的结果类型是EntityStudent。下面将EntityStudentname字段转为大写

1. 开启序列化

需要为 API 开启序列化

class ControllerStudent {@Web.get(':id')@Api.body(v.optional(), v.object(EntityStudent))
+ @Serializer.enable()async findOne(id) {return await this.scope.service.student.findOne(id);}
}
  • @Serializer.enable: 开启序列化

2. 设置字段

class EntityStudent {
+ @Serializer.transform('demo-student:upper')@Api.field(v.title($locale('Name')), v.default(''), v.min(3))name: string;
}
  • @Serializer.transform: 传入 Serializer Transform 名称demo-student:upper

Filter参数

可以为 Serializer Transform 传入 Filter 参数。系统先执行 Filter 函数,根据结果来控制当前 Serializer Transform 是否需要执行

比如,如果当前用户名是admin则不执行upper的转换逻辑

class EntityStudent {@Serializer.transform('demo-student:upper', {
+   filter(this: VonaContext) {
+     return this.user.name !== 'admin';
+   },})@Api.field(v.title($locale('Name')), v.default(''), v.min(3))name: string;
}

Serializer Transform参数

可以为 Serializer Transform 定义参数,通过参数更灵活的配置转换逻辑

比如,为 Serializer Transform upper定义first参数,用于控制是否只将首字母转为大写

1. 定义参数类型

export interface ISerializerTransformOptionsUpper extends IDecoratorSerializerTransformOptions {
+ first?: boolean;
}

2. 提供参数缺省值

@SerializerTransform<ISerializerTransformOptionsUpper>({
+ first: false,
})

3. 使用参数

export interface ISerializerTransformOptionsUpper extends IDecoratorSerializerTransformOptions {first?: boolean;
}@SerializerTransform<ISerializerTransformOptionsUpper>({first: false,
})
class SerializerTransformUpper {async transform(value: TypeSerializerTransformUpperValue,_data: TypeSerializerTransformUpperData,options: ISerializerTransformOptionsUpper,): Promise<TypeSerializerTransformUpperResult> {
-   return value.toUpperCase();
+   return options.first ? toUpperCaseFirstChar(value) : value.toUpperCase();}
}

4. 使用时指定参数

可以指定@Serializer.transform的参数

class EntityStudent {
+ @Serializer.transform('demo-student:upper', { first: true })@Api.field(v.title($locale('Name')), v.default(''), v.min(3))name: string;
}

5. App Config配置

可以在 App Config 中配置 Serializer Transform 参数

src/backend/config/config/config.ts

// onions
config.onions = {serializerTransform: {'demo-student:upper': {first: true,},},
};

6. 参数优先级

使用时指定参数 > App Config配置 > 参数缺省值

资源

  • Github:https://github.com/vonajs/vona
  • 文档:https://vona.js.org
http://www.zskr.cn/news/49344.html

相关文章:

  • 2025年比较好的10吨地磅TOP品牌厂家排行榜
  • 2025年靠谱的麦稻草浆挤浆机TOP实力厂家推荐榜
  • 2025新加坡金融科技节:看AI驱动的金融转型策略与“中国方案”
  • 2025年评价高的连续式台车炉厂家最新推荐权威榜
  • 软件测试— 测试分类 - 教程
  • 2025年知名的Lanny阀组比例阀厂家推荐及选购指南
  • 2025年知名的南京应急租发电机厂家最新推荐排行榜
  • 详细介绍:K8S(十四)—— K8s实战:HPA(Pod水平自动伸缩)完整部署与测试指南
  • 2025 年 11 月恒温恒湿系统厂家推荐排行榜,精加工车间恒温恒湿,厂房恒温恒湿,美术馆恒温恒湿,恒温恒湿仓库,计算机房恒温恒湿,档案室恒温恒湿系统,工业恒温恒湿,工厂车间恒温恒湿系统公司推荐
  • 2025 年 11 月设备运维服务厂家推荐排行榜,锅炉房运维,中央空调运维,冷却塔维修运维,冷冻机组运维,精密空调运维,机房运维服务公司推荐
  • 2025年知名的阻尼缓冲滑轨厂家推荐及选择指南
  • 2025年比较好的二手变频器厂家最新TOP排行榜
  • 2025年保温柜生产源头厂家技术解析与选择指南
  • 2025年热门的mpp电力管厂家最新热销排行
  • 2025年11月酵母抽提物品牌榜:清洁标签需求下的性能参数对比
  • 2025年国内冷藏柜供应厂家权威榜单
  • 2025年11月智能学习机品牌推荐:主流排行榜与口碑对比避坑指南
  • 2025年福田欧曼深度解析:技术驱动下的全场景重卡竞争力
  • 2025年十大自动化钣金加工厂家:产能与服务全解析,最新知名的钣金加工厂商推荐榜单睿意达显著提升服务
  • 2025年昆明泌尿生殖医院权威深度解析:专业诊疗体系惠民服务透视
  • 2025美标/国标/锻钢/高压/碳钢/高温/焊接/法兰闸阀厂家推荐浙江超成阀门
  • 2025年11月昆明泌尿医院排行:五强单位服务与资质全解析
  • K8s HTTPS流量管理实战:GatewayAPI指南 - 实践
  • 2025年11月geo公司推荐:主流服务商排行榜与高性价比解决方案指南
  • 2025年11月上海遗产继承律师评价榜:五强实力数据对比与精选
  • 2025 年 11 月燃油叉车,液压叉车,前移式叉车经销商最新推荐,技术实力与市场口碑深度解析!
  • 2025年11月geo优化公司推荐:主流服务提供商排行榜口碑对比指南
  • vue2.0实现拖动div使得上下div高度变化
  • 2025年水煤气钢管十大品牌权威排名:江苏华力钢管领跑行业
  • dotnet-sdk-10.0.100-win-x64.exe 怎么安装?Win10/Win11 安装步骤教程