尽管对 JavaScript 非常了解,但我对Node.js 生态系统中的这三个项目 到底做了什么感到困惑。 是不是类似于 Rails 的机架?有人可以解释一下吗?
[ 更新: 从 4.0 版本开始,Express 不再使用 Connect。但是,Express 仍然兼容为 Connect 编写的中间件。我的原始答案如下。]
很高兴您问到这个问题,因为对于查看 Node.js 的人来说,这绝对是一个常见的困惑点。这是我解释它的最佳方法:
Node.js 本身提供了一个http模块,它的createServer方法返回一个可以用来响应 HTTP 请求的对象。该对象继承了http.Server原型。
createServer
http.Server
Connect还提供了一个createServer方法,该方法返回一个继承了http.Server. Connect 的扩展主要是为了方便插入中间件。这就是为什么 Connect 将自己描述为“中间件框架”,并且经常被类比为 Ruby 的 Rack。
Express对 Connect 的作用与 Connect 对 http 模块的作用相同:它提供了createServer一种扩展 ConnectServer原型的方法。所以 Connect 的所有功能都在那里, 加上 视图渲染和用于描述路线的方便的 DSL。Ruby 的 Sinatra 就是一个很好的类比。
Server
然后还有其他框架可以更进一步并扩展 Express!例如,Zappa集成了对 CoffeeScript、服务器端 jQuery 和测试的支持。
这是“中间件”含义的具体示例:开箱即用,以上都没有为您提供静态文件。但是只需放入connect.static(Connect 附带的中间件),配置为指向一个目录,您的服务器将提供对该目录中文件的访问。请注意,Express 还提供 Connect 的中间件;express.static是一样的connect.static。(两者都是staticProvider直到最近才知道的。)
connect.static
express.static
staticProvider
我的印象是,现在大多数“真正的”Node.js 应用程序都是用 Express 开发的。它添加的功能非常有用,如果您需要,所有较低级别的功能仍然存在。