JSGI and Stick
JSGI and Stick 这篇文档将描述一个构建web应用程序的框架(framework),该架构构建在JSGI规范基础上,由多个middleware构成,这里的middleware跟我之前已经形成“思维定势”的middleware不太一样,以前一说中间件,想到的是weblogic、jboss之类的application server,这里的middleware没有那么庞大,他们指的就是一些以特定逻辑来处理web request的函数块。 名词定义: JSGI,JSGI对web application的定义,认为web application就是一个function,接受request参数,返回一个response对象,这是一个纯粹的、具有简洁美的概念,所谓function,就是封装具体功能,让外界只关注输入参数类型和返回结果。能够从这个高度看待web application,确实是搞高。JSGI中,定义application就是由多个模块化的middleware组成,这些middleware能够从外部配置。 Application,JSGI application,我们之前已经介绍,就是一个JavaScript函数,接受request,返回response对象,一个最简单的JSGI application应该看起来这个样子: function(request) { return { status: 200, headers: {}, body: [“Hello World!”] }; } 在JSGI规范中,还定义了一个Application对象,其本身当然包含前面说的application功能,另外还有一些额外的方法、特性。后文所说的application对象,指的都是这个。 Middleware,我们指的是一个JSGI application,它能够包裹住另一个JSGI application。request对象是否、如何传递给被包裹的JSGI application,完全由这个middleware来决定。 一个最简化的、不做任何操作的middleware,仅仅是将request作为参数传递给其包裹的内部application,并且返回结果,看起来应该是下面这个样子(nested是被middleware包裹的其他application,已经预先定义): function(request) { return nested(request); } Middleware Factory, 中间件工厂,姑且这么直译,就是一个JavaScript函数,其接受一个JSGI application作为参数,然后返回一个middleware function。这有点绕,代码看起来应该这个样子: function(nested) { return function(request) { return nested(request); };