connect middleware introduction

connect是一个node的开发框架,connect作者对它做了介绍
connect的精华就在于middleware堆栈,它允许你在一个请求到达或者对请求进行回复之前
对过程进行微调。比如,你可以写一个logger,追踪所有的URL请求,可以解析请求中的
query或数据等,还可以在发送回复之前对数据进行压缩以节省带宽。connect
默认已经提供了很丰富的middleware,也有许多第三方的middleware可供使用,必要
的时候也可以自己编写。由于connect是建立在nodejs的http模块基础上的,因此倚赖
http模块的实现,而且得很熟悉才行。

要注意的是现在express 2.x使用了connect 1.x版本,这个版本缺少一些middleware,
比如compress。而connect现在已经到了2.3.3版本,最近好像3.0也已见端倪,这几个
版本之间的middleware不一定兼容,所以交叉使用的时候可能会出现问题。

比如我从connect 1.8.7拿过来的compress在使用过程中
发现有时候会出现Can't ... after they are sent.的错误,于是我在拷贝
过来的compress中做了一点改动,对connect的patch再次做了hack。

1
2
3
4
5
6
7
8
9
10
11
12
//Hack, override connect 1.x patch
var http = require('http')
, _resp = http.OutgoingMessage.prototype;

(function() {
if (_resp._compressPatched) return;
_resp.__defineGetter__('headerSent', function(){
return this._header || this._headerSent;
});
_resp._compressPatched = true;

}());