尽管非常了解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对http模块所做的连接:它提供了createServer一种扩展Connect Server原型的方法。因此,这里提供了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开发的。它添加的功能非常有用,并且如果需要,所有较低级别的功能仍然存在。