好到有种相见恨晚的感觉,呵呵。Connect 所谓的中间件思想,可谓不新鲜。但是于 Node 上面使用,却是第一个吃螃蟹的人,以致今日,有为数不少的第三方中间件。套一句俗话,充分利用好这些中间件,能让你的工作事半功倍,呵呵。
这种中间件思想,简直就是抓住了 Web Server 七尺之喉,把关 Request / Response,既清晰又灵活,好处十分明显。Connect 约定一种规范,把所有参与进来的中间件构成一个队列,中间件之间的执行遵循 Connect 约定的接口。这样的流程最后,必定是 Response.end() 的。也就是说最终输出有且只有一个。当然“最终输出”也不一定放在最后的,如日志到文件则可以放在 Response.end() 之后。我跟大家说的,就是一个流程的意思、一道工序的意思。所以,你把要使用的中间件放在队列的哪个位置,就有所考究了。在前面的可能因为某些条件限制了后面的执行。
var app = connect() .use(connect.logger('dev')) .use(function(req, res){ res.end('dsds'); }) .use('/xxx', function(request, response){ .../xxx 永远不会执行…… });
不过值得一提的是,Connect 的中间件队列与所谓的异步、同步执行无关。异步/同步取决于你逻辑的封装如何。有异步的,那 Connect 的中间件必然异步执行。当然,从轮廓上说,Connect 的链式调用像同步的方式。
我感兴趣的 Connect 或者说打算从 Connect 的功能: Session 和其他的相关第三方组件。其实这些功能组件凭自己写也不是难事,至少 ASP JScrpt 我写过相当部分~不过就是花时间啦。
跟 Connect 还有点渊源的就是这位仁兄出自 Sencha L.L.C 的,Ext JS 粉在此膜拜~
说到 Connect 就不得不提下面相关资源:《Connect模块解析(之一)》、《Connect模块解析(之二)静态文件中间件》、《connect源码分析--基础架构》。
用法:
像 asp/php/jsp 这样的则属于动态网页,查询数据和调用 EJS 渲染模板,否则,将是调用静态服务器:
var siteRoot = 'C:/project/yueyun/root'; connect.static(siteRoot)(request, response, function(){});
P.S: Node-sqlite3 win下面终于带驱动包了,不用自己编译~适合我此等的小白。直接下:http://cl.ly/0w1B023C3w0Y NPM 新版可解决此难题
原来这种中间件的理念就是 Pipeline!详见: