Open yeyeye0525 opened 3 years ago
本文首发于:https://github.com/bigo-frontend/blog/ 欢迎关注、转载。
bigo前端开始推广bff,hello农场作为首个bff落地项目,历经2个月,完成了从0-1的落地实践。
【node实战系列】按照小模块拆分,从开发者的角度讲叙,如何进行bff高可用编码。
本系列文章,基于eggjs框架编码,使用ts语法,为了提升阅读体验,建议大家先了解一下eggjs。
欢迎大家关注我们的github blog,持续更新。 https://github.com/bigo-frontend/blog/issues
笔者以前复盘过一个线上事故,前端提交数据,bff透传,中台业务消费,发现任何一方都以为调用方做了入参校验,导致最终入库时异常了。
这种情况在日常开发过程中都挺常见的。
我们作为bff聚合层,有责任进行入参校验的。
校验规则,其实egg框架已经集成了校验规则,使用起来也特别简单。
/** * 是否入参校验异常 * * @param {*} rule 校验规则 * @param {*} obj 校验对象 * @returns */ validateErr(rule, obj: PlainObject): boolean { try { this.validate(rule, obj); return false; } catch (err) { this.logError('入参校验异常=%j', err); this.fail({ message: err, }); return true; } },
const rule = { account: { type: 'object' }, initDecoration: { type: 'string', required: false }, initMood: { type: 'number', default: 100, required: false }, }; if (ctx.validateErr(rule, { account: {"accountName":"bigo大魔王", "gender":"F"}, initDecoration: '2333,yysd' })) { return; }
const rule = { account: { type: 'object' }, initDecoration: { type: 'string', required: false }, initMood: { type: 'number', default: 100, required: false }, }; const ruleAccount = { showGlory: { type: 'enum', values: [0, 1], required: true}, showAppearance: { type: 'enum', values: [0, 1], required: true}, interestTags: { type: 'string', required: false }, }; if (ctx.validateErr(rule, { account: {"accountName":"bigo大魔王", "gender":"F"}, initDecoration: '2333,yysd' })) { return; } if (ctx.validateErr(ruleAccount, { showGlory: 0, showAppearance: 1, })) { return; }
在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用hardcode去校验(if..else..),会造成代码冗余,复用性低,导致维护成本比较高。借助validate组件,可以很方便地通过规则来校验参数。
欢迎大家留言讨论,祝工作顺利、生活愉快!
我是bigo前端,下期见。
本文首发于:https://github.com/bigo-frontend/blog/ 欢迎关注、转载。
背景
bigo前端开始推广bff,hello农场作为首个bff落地项目,历经2个月,完成了从0-1的落地实践。
【node实战系列】按照小模块拆分,从开发者的角度讲叙,如何进行bff高可用编码。
本系列文章,基于eggjs框架编码,使用ts语法,为了提升阅读体验,建议大家先了解一下eggjs。
系列文章
欢迎大家关注我们的github blog,持续更新。 https://github.com/bigo-frontend/blog/issues
入参校验validate
前言
笔者以前复盘过一个线上事故,前端提交数据,bff透传,中台业务消费,发现任何一方都以为调用方做了入参校验,导致最终入库时异常了。
这种情况在日常开发过程中都挺常见的。
我们作为bff聚合层,有责任进行入参校验的。
校验规则
校验规则,其实egg框架已经集成了校验规则,使用起来也特别简单。
封装通用校验方法
单条件入参校验
多条件入参校验
总结
在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用hardcode去校验(if..else..),会造成代码冗余,复用性低,导致维护成本比较高。借助validate组件,可以很方便地通过规则来校验参数。
欢迎大家留言讨论,祝工作顺利、生活愉快!
我是bigo前端,下期见。