研究了几乎整个express connect 框架不知道能做什么。
发布于 12 年前 作者 firstgeniusboy 9674 次浏览 最后一次编辑是 8 年前

研究了几乎整个express connect 框架不知道能做什么。。前提 c,c++ 那部分没看过。

30 回复

也是刚接触,connect里都是一些middleware,用于拦截并处理web请求,类似java servlet里的filter,典型的chain of responsibility pattern,express构建于connect之上,作路由很方便

其实我有点不是很喜欢它的路由机制。express给我的感觉一点没有mvc的感觉。递归太多了。尤其是 express 自己的路由处理,全部是递归组织的。有点担心大规模处理堆栈会受不了。

@firstgeniusboy 没有递归啊。。。你是说回调吗,node里面回调很多,嵌套多了代码会很难看,我比较喜欢Step这个library,可以解决callback嵌套的问题。express的路由风格我倒是挺喜欢的 搭建restful webservice特别方便。我之前发过一个帖子,用node搭webservice,mvc交给前端做,你可以看一下~http://cnodejs.org/topic/50bd683e637ffa41557ce0c2

@ltebean 它的 connect 的use 和 express 自己的路由处理,都是递归再走的。跟嵌套也差不多,我想资源上应该比嵌套要耗费一些吧。都是处理不结束整个过程不会返回的。

我也不喜欢express风格的路由。

@firstgeniusboy 恩~不过这应该不成问题吧~servlet里的filter和struts的interceptor都是这样的

@ltebean 个人只是觉得,connect 的中间件系统 结合 express 的路由递归太多,因为本质上express 的路由也是以connect 的 use 方法实现的。包括参数的预处理 都是在同一个 递归中存在的。递归的层次太多了,大规模的并发不知道系统能不能承受得住。而且觉得路由就不是以mvc存在的,可能是我没真正开发过网站的缘故, 我觉得可以从新处理express 的路由风格。

觉得路由不爽的来试试rainbow

呃,楼主真的明白什么是MVC么…

@firstgeniusboy 如何才能有MVC的感觉?

其实我有点不是很喜欢它的路由机制。express给我的感觉一点没有mvc的感觉。递归太多了

@venngomez 可能我更多习惯于php的 mvc,不是这种。但是他的递归处理我是真心觉得不是很好。

最近也在研究connect,表示还不错!connect就是一堆中间件的集合,connect负责对这些中间件进行管理,对HTTP请求进行过滤并处理,比较接近底层。区区200多行代码,能实现这样的功能实属不易,楼主还指望connect有更丰富,完善的功能么。

不是,我很欣赏connect 的模式,我是不喜欢express的路由分发机制。

@firstgeniusboy 那就自己写一个呗

@saber 的确有这个想法,以中间件的方式插入,然后借用rest的概念让url指定controller。

@halfblood @firstgeniusboy

1、Express的路由中间件不是强制使用的;

2、要实现所谓的“让url指定controller”其实也挺简单,比如:

app.all('/:controller/:action', function (req, res, next) {
  var c = req.params.controller;
  var a = req.params.action;
  var m = req.method;
  // 查找相应的处理程序
  var fn = getControllerAction(c, a, m);
  if (!fn) return next();
  // 处理
  fn(req, res, next);
});

http://expressjs.com/api.html#app.VERB

@leizongmin 路由当然不是强制的,不然怎么实现灵活的配置中间件……

@leizongmin all 的源码本质上也是路由实现的。我看了 一旦定义了all 就是为http 的所有方法都定义了一个路由(get,post,put,…)。最近在看angular js 就是前端 js mvc, 其实设计思想ajax 刚出现的时候就已经有了,只是当时缺乏成熟的理念。没想到js 现在会以井喷的方式出现。

楼主真的看过代码了吗?middleware和middleware之间不是递归调用的,就算你写再多middleware,也不用担心堆栈溢出。

我又看了一下,都是在内部递归的,不全部返回函数是不会退出的。不论是use的,还是get,,post 里面的都一样。

@firstgeniusboy 我也又看了一遍代码,你说的没错,确实是递归的。但是前提是middleware或者handle里全是同步调用的代码。只要出现异步调用,函数调用就会马上返回到最上层。

@imzshh 网页调用不同于内部轮询,必须快速返回。虽然你说过异步调用,但是闭包的内部职责链对象可能会有段时间释放不。假如你跟我说的是一个就是。在req.on(‘end’ 内部调用next 调用。

@imzshh 你说的我之前的确没有考虑到。

express这东西,初看,觉得很多余,不如用nodejs 的http来得直接了当,用了后,才觉得那作者真是鬼才,小小的一个express,解决了很多问题。

其实我倒是觉得 更是因为有connect 这个插件做基础。刚开始看的时候没注意还以为connect是express的一部分。后来发现不是。connect 里面定义了中间件的处理方式。虽然没有完整的路由,但是开源的东西的确不缺这个。

@firstgeniusboy 对,express是基于connect, 而connect的作者也是express的作者,他的做法巧妙,你可用connect而不用express, 如你开始用express, connect已在其中,我想很多人跟我一样是先用express, 然后才认识connect的,这家伙有很多的nodejs的模块,比如Superagent, Mocha等。Express是基于Sinatra, 我从没用过Sinatra, 用的只是Java的一些Web Framework, Express开始觉得很不习惯,久了,却觉得要是Java的framework也是这样,更好,

@venngomez 我还真不是很清楚,express 跟 connect 是一个作者。我觉得做这件事起码也要一个团队吧。可能我觉得express 不舒服的原因,是只能统一定义路由,而且处理流程不好掌握吧。我倒是接触了一个基于connect 的例子,不过里面路由借用的是urlrounte 这个插件。觉得也还不错。

@firstgeniusboy 在Connect的package.json,列出的作者是TJ Holowaychuk: https://github.com/senchalabs/connect/blob/master/package.json 跟Express的第一作者是同一个人: https://github.com/visionmedia/express/blob/master/package.json 如你问些express的问题,通常得到他的快速回答。这家伙有很多原创的modules: https://github.com/visionmedia

@venngomez 那这家伙很N了。我看他的代码都觉得很累了,何况是写呢。其实看是一回事写又是另一回事。即便全看懂了也未必能写出来。

回到顶部