分享一个 express 参数验证组件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunkuku
V2EX    Node.js

分享一个 express 参数验证组件

  •  
  •   sunkuku 2017-08-15 20:30:13 +08:00 4070 次点击
    这是一个创建于 3009 天前的主题,其中的信息可能已经有所发展或是发生改变。

    缘起

    在项目开发中,前后端分离,后端采用 express 提供 api 接口。有一个非常常见的需求是接口参数验证,比如

    • 获取用户地址列表,需要判断用户是否以 query 形式传入 token、limit、skip

    原始做法是在业务函数中判断,但是这样太麻烦了

    需求

    我们需要这样的一种框架,他需要满足下面几点

    1.基于配置的参数验证

    这个框架需要做到不需要在业务逻辑里判断,只需要提供一个配置 json 就可以自动进行验证。例如上面的例子中,只需要提供

    Screen Shot 2017-08-15 at 8.04.11 PM.png

    2.灵活,可以满足各类参数验证

    例如,我们需要判断这个 limit 是一个整数,并且范围是 10-50,skip 也是一个整数,范围是 0-100

    再例如,我们需要要求 token、skip、limit 这三个参数都必须放在 query 里面

    再例如,在一个 Post 接口里面,我们需要要求参数在 body 里面,并且还是自动解析的

    快速使用

    基于上面的需求,提高开发效率,开发了适用于 express 的 joi-router。再说他的特性之前,先看他是怎么用的

    Screen Shot 2017-08-15 at 8.10.28 PM.png

    上面这里例子里,验证的是 query 参数必须有一个 userId,并且 userId 必须是字母和数字的组合,长度在 3 个字节到 30 个字节之间。

    再看个复杂点的例子

    Screen Shot 2017-08-15 at 8.15.37 PM.png

    是不是用起来很简单,尤其是参数特别多的时候,并且组合在一起的时候。

    Feature

    这个项目有如下几个特点

    • Api 参数验证
    • Api 返回结果格式验证
    • 使用例子
    • 完善的测试代码(代码测试覆盖率 90%以上)
    • 持续集成

    未来还会提供一种功能,就是根据你的代码,生成接口文档。

    项目地址

    欢迎大家 Follow 和 Star,更欢迎你参与进来提出意见,提出 PR

    Joi-router

    https://github.com/sunkuo/joi-router

    你可以在 github 上看到安装使用说明

    引用

    joi koa-joi-router

    2 条回复    2017-08-15 21:33:26 +08:00
    wotemelon
        1
    wotemelon  
       2017-08-15 20:45:22 +08:00 via Android
    ajv 似乎挺不错的,试试你这个。写参数验证着实头疼烦琐无聊
    marvinwilliam
        2
    marvinwilliam  
       2017-08-15 21:33:26 +08:00
    我们这边也用的 ajv,json-schema 毕竟还是有个通用规范,用那个配置也还算是挺方便的.
    关于     帮助文档     自助推广系统   &nsp; 博客     API     FAQ     Solana     5092 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 03:49 PVG 11:49 LAX 19:49 JFK 22:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86