Express 有没有类似 Spring MVC RequestMapping 的 Router - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Niphor

Express 有没有类似 Spring MVC RequestMapping 的 Router

  •  
  •   Niphor 2015 年 7 月 30 日 3934 次点击
    这是一个创建于 3922 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SpringMVC的RequestMapping 参数有很多,以根据 参数 返回值类型 等映射

    @RequestMapping(value="/",params="",header=""...)

    而Express的Router 我看了下文档,好像除了请求的Method,和URL,其它参数是不能用来路由的。

    感觉SpringMVC的Mapping更清晰一些

    尝试了好几种关键词Google,没找到有用的信息,难道要自己实现吗?
    请问有没有类似的类库...

    15 条回复    2015-08-01 23:12:59 +08:00
    breeswish
        1
    breeswish  
       2015 年 7 月 30 日
    expressjs 主要的思想是中间件…和 SpringMVC 的思想还是有一些区别的..
    看看这个?https://www.npmjs.com/package/express-route-versioning
    不过代码上就没那么简洁明了了
    czheo
        2
    czheo  
       2015 年 7 月 30 日
    看用下面if else就够了,挺直观的把。
    req.headers
    req.params
    req.query
    Niphor
        3
    Niphor  
    OP
       2015 年 7 月 30 日
    @breeswish 居然还有这种...
    这需求用中间件也不是能很好处理.还不如按 @czheo 说的用 if else

    @czheo
    各有千秋吧,if else 写多了也眼花(当然眼花了,说明这代码肯定写得搓...)


    只是前段时间用多了SpringMVC的RequestMapping 现在再用Express的Router 突然感觉不适应了...
    czheo
        4
    czheo  
       2015 年 7 月 30 日
    @Niphor 撸多了就习惯了
    zonghua
        5
    zonghua  
       2015 年 7 月 30 日
    express够灵活啊,默认都没有给session中间件
    czheo
        6
    czheo  
       2015 年 7 月 30 日
    @zonghua bodyParser也要自己加载不是,而且除了默认的还有好几个implementation
    zonghua
        7
    zonghua  
       2015 年 7 月 31 日
    @czheo bodyParser 有啊,我说的是用express-generator生成的没有session和cookie。
    ysmood
        8
    ysmood  
       2015 年 7 月 31 日
    @Niphor 试试 NoFlow 吧,支持全部这些,且更简洁灵活,更能应对复杂的异步问题: https://github.com/ysmood/noflow

    复杂 route 的示例: https://github.com/ysmood/noflow/blob/master/examples/routes.js
    bramblex
        9
    bramblex  
       2015 年 7 月 31 日
    所以我自己造了一个不需要自己手写路由的框架。
    Niphor
        10
    Niphor  
    OP
       2015 年 7 月 31 日
    @ysmood
    大致看了一下代码,Coffee不感冒...看着眼花,如有误解多多包含:
    的确多了个Header的判断,其它的如接受和返回的MediaType判断没有,部分Param的判断也是。
    不过加一下应该也不难
    然而因为直接是个数组,感觉应该先排下序,不然得考虑route加入的先后顺序

    @bramblex
    求拜读。
    ysmood
        11
    ysmood  
       2015 年 7 月 31 日
    @Niphor express.js 也是要考虑顺序的,这个和我一样,都需要考虑设置 route 的顺序,而我这个可以排序和调换路由的顺序,而 express.js 不行。 MediaType 这种的判断都可以啊?直接写在 headers selector里就行了,这也是我这个库能做到而 express 做起来麻烦的地方。

    我就是觉得 express 的 route 选择功能太弱才想自己写个的,因为我需要做 proxy,express 不适合做这个,它只适合做 http server
    ysmood
        12
    ysmood  
       2015 年 7 月 31 日
    @Niphor 给你发的代码是纯 js 啊?而且就算你觉得不够,selector 可是是一个函数,于是几乎可以完成任何复杂的选择功能。
    Niphor
        13
    Niphor  
    OP
       2015 年 7 月 31 日
    @ysmood 嗯例子是纯js的,但是我不确定可用哪些参数和参数有哪些可用类型,所以去看了下Proxy的实现...

    主要是SpringMVC细分了好几个参数
    ```
    @RequestMapping(value = "/{id}", method = RequestMethod.GET, params = "",cOnsumes= "",produces =""
    ```
    然后 一时脑热,忘记了 MediaType就是head里的... 不好意思
    ysmood
        14
    ysmood  
       2015 年 7 月 31 日
    @Niphor 比如 RequestMapping 能同时截获 POST 和 PUT 吗?NoFlow 是可以轻松办到的。
    Niphor
        15
    Niphor  
    OP
       2015 年 8 月 1 日
    @ysmood 也是可以的 只要写 method = { RequestMethod.PUT, RequestMethod.POST } 就行了
    还是比较灵活的...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2365 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 16:09 PVG 00:09 LAX 09:09 JFK 12:09
    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