[ 更新: 从4.0版本开始,Express不再使用Connect。但是,Express仍与为Connect编写的中间件兼容。我的原始答案如下。
我很高兴您对此提出疑问,因为对于那些关注Node.js的人们来说,这无疑是一个常见的困惑点。这是我最好的解释:
Node.js本身提供了一个http模块,该模块的
createServer
方法返回一个对象,您可以使用该对象来响应HTTP请求。该对象继承了http.Server
原型。Connect还提供了一种
createServer
方法,该方法返回一个继承了扩展版本的对象http.Server
。Connect的扩展主要用于简化中间件的插入。这就是为什么Connect将自己描述为“中间件框架”的原因,并且通常将其类似于Ruby的Rack。Express确实做到了Connect对http模块所做的连接:它提供了
createServer
一种扩展ConnectServer
原型的方法。因此,这里提供了Connect的所有功能, 以及 视图渲染和用于描述路线的便捷DSL。Ruby的Sinatra是一个很好的类比。然后还有其他框架可以扩展Express!例如Zappa,它集成了对Coffeescript,服务器端jQuery和测试的支持。
这是“中间件”含义的具体示例:开箱即用,以上都不为您提供静态文件。但是只需
connect.static插入(Connect附带的中间件),该中间件被配置为指向目录,您的服务器即可提供对该目录中文件的访问。请注意,Express还提供了Connect的中间件。
express.static与相同
connect.static。(两者都被称为
staticProvider直到最近。)
我的印象是,如今,大多数“真正的” Node.js应用程序都是使用Express开发的。它添加的功能非常有用,并且如果需要,所有较低级别的功能仍然存在。



