浪费npm包名

开篇废话

好长时间没有写过任何东西了,并不是因为这期间我什么都没干,天天咕咕咕,而是觉得真的和各位大佬之间的差距太大了,有事被催着干活,没事躺尸看海绵宝宝。最近跟着高先生写一个扶贫的项目,本来挺简单的项目,愣是给写出花来了,还由此诞生了一个npm包,浪费了koa2-auth的包名,实在惭愧。

大半夜的就分享一下这个事情吧

来历

碎碎念警告,如有不适请跳过

开学之前,高先生找到我,叫我接一个后端的项目,就是上学期由于出去浪而错过面试的项目。当然,这种自己找上来的,大概率不是什么好事,你不能说叫我接我就接嘛,起码我要先体验下。

在看了看代码之后,嗯~不愧是合作多次的高先生,还是熟悉的味道,就接了下来。本来已经开发完成的项目,蹭了高先生的光,过来修修补补,顺便蹭蹭志愿时长,简直不要太舒服。

由于没有什么新的产品设计上的需求了,我就转向去做做代码维护的事情,为了让自己之后的代码调整等大更新可以顺利通过,最重要的事情就是开始写单元测试。

渐渐的,单元测试覆盖了100%的正常访问情况和30%的错误拦截情况,基本就可以了,毕竟错误拦截基本上也是权限错误,这是一个前后端分离的项目,除非有人故意搞破坏想投数据,要不也不会出现权限不对的问题,毕竟小项目。

然后就是把通篇的显式定义的new Promise替换成了Mongoose自带返回的样子,大砍特砍,多亏了上面写的单元测试,也就省了高先生的代码审核了。与此同时,自动部署也被我摸清楚怎么用了,上传的代码自动测试,合并到测试/主分支上就会被推送部署到测试环境中。

然后就是我沉迷Docker的时间了,直接改源码部署为镜像部署,同时开了一个集群(没错,单机集群),4个Docker跑在上面,并发理所当然提高了。

然后引库,session缓存上Redis。Gitlab-ci自动测试简直不要太爽。

结果还是没有什么新需求,这时候就开始写花了,这篇水文的主角就登场了。

需求

高先生还是觉得现在的验权实在是太过臃肿(确实,在需要验权的时候全员switch case一个权限都跑不了),然后给我发来了样例:

高先生的目标

当时并没有看到这里有一个server层,只看到后面那个冒号分割的东西好帅呀!好简洁!然后我就想到了之前看hapi.js好像有这么个东西,兴冲冲就跑到图书馆翻出了当时借的书,找了一遍发现并没有。略失望。然后就开始自己实现呗。照葫芦画瓢的技术还是可以的。

就算画也得有个参考吧,语法风格就定下来了,使用这种双冒号分割的方式来验权。然后有借鉴了一下路由的分级解析,就有了现在这个koa2-auth

我最终的实现效果:

1
await ctx.auth.must(`Item::${ctx.params.id}::write`);

还是有点差距的,但是跟之前的画风比,这样子很不错了(开始自夸)。

成品

我就不在这里粘README了,毕竟已经浪费了一个包名了,各位可以直接去npmjs.org网站搜索查找。

传送门:koa2-auth

关于npm包发布维护的东西还不太会,最后感谢来自高先生的友情翻译,和高先生的提携。

最后大字宣传他的博客:

高渐离の屋