Express 有没有类似 Spring MVC RequestMapping 的 Router

2015-07-30 22:36:08 +08:00
 Niphor

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

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

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

感觉SpringMVC的Mapping更清晰一些

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

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

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


只是前段时间用多了SpringMVC的RequestMapping 现在再用Express的Router 突然感觉不适应了...
czheo
2015-07-30 23:34:06 +08:00
@Niphor 撸多了就习惯了
zonghua
2015-07-30 23:34:52 +08:00
express够灵活啊,默认都没有给session中间件
czheo
2015-07-30 23:46:56 +08:00
@zonghua bodyParser也要自己加载不是,而且除了默认的还有好几个implementation
zonghua
2015-07-31 00:18:50 +08:00
@czheo bodyParser 有啊,我说的是用express-generator生成的没有session和cookie。
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
2015-07-31 09:55:10 +08:00
所以我自己造了一个不需要自己手写路由的框架。
Niphor
2015-07-31 11:08:33 +08:00
@ysmood
大致看了一下代码,Coffee不感冒...看着眼花,如有误解多多包含:
的确多了个Header的判断,其它的如接受和返回的MediaType判断没有,部分Param的判断也是。
不过加一下应该也不难
然而因为直接是个数组,感觉应该先排下序,不然得考虑route加入的先后顺序

@bramblex
求拜读。
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
2015-07-31 12:21:20 +08:00
@Niphor 给你发的代码是纯 js 啊?而且就算你觉得不够,selector 可是是一个函数,于是几乎可以完成任何复杂的选择功能。
Niphor
2015-07-31 14:12:57 +08:00
@ysmood 嗯例子是纯js的,但是我不确定可用哪些参数和参数有哪些可用类型,所以去看了下Proxy的实现...

主要是SpringMVC细分了好几个参数
```
@RequestMapping(value = "/{id}", method = RequestMethod.GET, params = "",consumes = "",produces =""
```
然后 一时脑热,忘记了 MediaType就是head里的... 不好意思
ysmood
2015-07-31 14:33:24 +08:00
@Niphor 比如 RequestMapping 能同时截获 POST 和 PUT 吗?NoFlow 是可以轻松办到的。
Niphor
2015-08-01 23:12:59 +08:00
@ysmood 也是可以的 只要写 method = { RequestMethod.PUT, RequestMethod.POST } 就行了
还是比较灵活的...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209697

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX