We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本文首发于: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前端,下期见。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
本文首发于: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前端,下期见。
The text was updated successfully, but these errors were encountered: