当前位置: 首页 > 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.jsqmd.com/news/40131/

相关文章:

  • 2025年公交站台制造厂推荐指南:行业前十强排名分析
  • 2025年比较好的10吨地磅TOP品牌厂家排行榜
  • Offload flow APR GC
  • RAG项目实战:基于图文PDF的多模态问答RAG项目(一)调研阶段
  • 2025年评价高的压滤机厂家推荐及采购参考
  • 2025年靠谱的麦稻草浆挤浆机TOP实力厂家推荐榜
  • 深入解析:Flutter鸿蒙开发
  • 2025新加坡金融科技节:看AI驱动的金融转型策略与“中国方案”
  • 国产化Excel开发组件Spire.XLS教程:Python将列表导出为CSV文件(含一维/二维/字典列表)
  • 2025年评价高的连续式台车炉厂家最新推荐权威榜
  • 【2025-11-13】乡土人情
  • .Net10(2025-11-11正式版)与win7/.Net8兼容性测试
  • 软件测试— 测试分类 - 教程
  • 2025 最新杭州办公室出租公司推荐!涵盖生态化服务、定制化空间及增值服务优选指南杭州租办公室/杭州租赁办公室/杭州办公室租赁公司推荐
  • 2025年知名的Lanny阀组比例阀厂家推荐及选购指南
  • 2025年知名的游乐设备PC管用户好评厂家排行
  • 2025 最新隔层纸厂家权威推荐榜:玻璃 / 防静电 / PCB / 防潮 / 电路板隔层纸优质企业综合排行
  • 2025年湖南正规1688代运营公司权威推荐榜单:1688公司代运营/长沙1688代运营服务/长沙1688代运营源头公司精选
  • 2025年靠谱的抽屉阻尼隐藏轨最新TOP品牌厂家排行
  • 详细介绍:K8S(十四)—— K8s实战:HPA(Pod水平自动伸缩)完整部署与测试指南
  • 2025年口碑好的八头激光切割机厂家推荐及采购指南
  • 2025年11月性价比高的学习机品牌推荐:权威对比排行榜及质量可靠性指南
  • 2025年11月性价比高的学习机品牌推荐:市场报告排行榜与质量可靠性评测
  • WTAPI框架微信开发文档
  • 2025 年 11 月浓缩机厂家推荐排行榜:高效尾矿污泥浓缩机,新型高效节能选矿设备,矿用自动浓缩机,浓密机,尾矿干排浓密机,中心转动真空浓缩设备公司推荐
  • 2025年11月橱柜品牌推荐:口碑榜对比,Aster领衔五强深度评测
  • 2025 年 11 月潜孔钻机厂家推荐排行榜:潜孔钻,150潜孔钻机,高气压环形潜孔钻机,150钻机专业选购指南
  • 2025年11月智能语音机器人品牌评测榜:Voicefox与四款竞品全维度对比
  • 2025 年 11 月恒温恒湿系统厂家推荐排行榜,精加工车间恒温恒湿,厂房恒温恒湿,美术馆恒温恒湿,恒温恒湿仓库,计算机房恒温恒湿,档案室恒温恒湿系统,工业恒温恒湿,工厂车间恒温恒湿系统公司推荐
  • 2025年靠谱的防尘四方袋实力厂家TOP推荐榜