V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Niphor
V2EX  ›  Node.js

Express 有没有类似 Spring MVC RequestMapping 的 Router

  •  
  •   Niphor · 2015-07-30 22:36:08 +08:00 · 3414 次点击
    这是一个创建于 3197 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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-07-30 22:41:45 +08:00
    expressjs 主要的思想是中间件…和 SpringMVC 的思想还是有一些区别的..
    看看这个?https://www.npmjs.com/package/express-route-versioning
    不过代码上就没那么简洁明了了
    czheo
        2
    czheo  
       2015-07-30 23:00:48 +08:00
    看用下面if else就够了,挺直观的把。
    req.headers
    req.params
    req.query
    Niphor
        3
    Niphor  
    OP
       2015-07-30 23:18:46 +08:00
    @breeswish 居然还有这种...
    这需求用中间件也不是能很好处理.还不如按 @czheo 说的用 if else

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


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

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

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

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

    主要是SpringMVC细分了好几个参数
    ```
    @RequestMapping(value = "/{id}", method = RequestMethod.GET, params = "",consumes = "",produces =""
    ```
    然后 一时脑热,忘记了 MediaType就是head里的... 不好意思
    ysmood
        14
    ysmood  
       2015-07-31 14:33:24 +08:00
    @Niphor 比如 RequestMapping 能同时截获 POST 和 PUT 吗?NoFlow 是可以轻松办到的。
    Niphor
        15
    Niphor  
    OP
       2015-08-01 23:12:59 +08:00
    @ysmood 也是可以的 只要写 method = { RequestMethod.PUT, RequestMethod.POST } 就行了
    还是比较灵活的...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   936 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:10 · PVG 03:10 · LAX 12:10 · JFK 15:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.