尽管非常了解JavaScript,但我对Node.js生态系统中的这三个项目的确切用途感到困惑。像Rails的架子吗?有人可以解释一下吗?
尽管非常了解JavaScript,但我对Node.js生态系统中的这三个项目的确切用途感到困惑。像Rails的架子吗?有人可以解释一下吗?
Answers:
[ 更新:从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
一种扩展Connect Server
原型的方法。因此,这里提供了Connect的所有功能,以及视图渲染和用于描述路线的便捷DSL。Ruby的Sinatra是一个很好的类比。
然后还有其他框架可以扩展Express!例如Zappa,它集成了对CoffeeScript,服务器端jQuery和测试的支持。
这是“中间件”含义的具体示例:开箱即用,以上都不为您提供静态文件。但是只需connect.static
插入(Connect附带的中间件),将其配置为指向目录,您的服务器即可提供对该目录中文件的访问。请注意,Express还提供了Connect的中间件。express.static
与相同connect.static
。(两者都被称为staticProvider
直到最近。)
我的印象是,如今,大多数“真正的” Node.js应用都是使用Express开发的。它添加的功能非常有用,并且如果需要,所有较低级别的功能仍然存在。
公认的答案确实很旧(现在是错误的)。这是基于当前版本的Connect(3.0)/ Express(4.0)的信息(带有源)。
http / https createServer
,它只需要一个回调(req,res),例如
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
中间件基本上是介于您的应用程序代码和一些底层API之间的任何软件。Connect扩展了内置的HTTP服务器功能并添加了插件框架。插件充当中间件,因此connect是一个中间件框架
这样做的方式非常简单(实际上代码很短!)。调用后,var connect = require('connect'); var app = connect();
您将获得一个app
可以执行以下操作的函数:
由于1.),您可以执行以下操作:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
结合2),您将获得:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect提供了一个实用程序函数来注册自己,http
因此您无需调用http.createServer(app)
。其被调用listen
,代码简单地创建了一个新的http服务器,将连接注册为回调并将参数转发给http.listen
。从来源
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
因此,您可以执行以下操作:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
http.createServer
在顶部使用插件框架仍然是您的好时机。
ExpressJS和connect是并行项目。Connect 只是一个具有良好use
功能的中间件框架。Express不依赖于Connect(请参阅package.json)。但是,它所做的一切连接都可以做到:
createServer
像connect 这样注册,因为它也是可以带req
/ res
对(源)的功能。listen
功能,用于向http注册除了connect提供的功能(表示重复的功能)外,它还有很多其他功能。例如
use
ExpressJS 和 connect 的功能兼容,因此可以共享中间件。两者都是中间件框架,表达不仅仅是一个简单的中间件框架。
我的看法:基于以上情况^您已获得足够的信息,可以做出自己的选择。
http.createServer
如果要创建像从头连接/ expressjs。http.createServer
大多数人应该只使用ExpressJS。
在某些时候这些可能是正确的,但现在是错误的:
继承了http.Server的扩展版本
错误。它不会扩展它,如您所见...正在使用它
Express可以进行连接,而Connect可以完成对http模块的连接
Express 4.0甚至不依赖于连接。请参阅当前的package.json依赖项部分
Node.js是服务器端的JavaScript引擎。
除了所有js功能之外,它还包括联网功能(例如HTTP)和对文件系统的访问。
这与客户端js不同,在客户端js中,网络任务由浏览器垄断,并且出于安全原因,禁止访问文件系统。
在服务器中运行的东西可以理解HTTP,并且可以访问文件,听起来像Web服务器。但这不是一个。
为了使node.js像Web服务器一样工作,必须对其进行编程:处理传入的HTTP请求并提供适当的响应。
Express就是这样做的:这是js中Web服务器的实现。
因此,实现网站就像配置Express路由,并对网站的特定功能进行编程一样。
服务页面涉及许多任务。这些任务中的许多是众所周知的且非常常见,因此节点的Connect模块(可在节点下运行的许多模块之一)实现了这些任务。
查看当前令人印象深刻的产品:
Connect是框架,通过它可以选择所需的(子)模块。
“ Contrib中间件”页面列举了一长串其他中间件。
Express本身具有最常见的Connect中间件。
安装node.js。
节点自带NPM,该节点包管理器。
该命令npm install -g express
将在全球范围内下载并安装Express(请参阅Express Guide)。
运行express foo
在命令行(而不是在节点)将创建一个随时可以运行的应用程序名为foo。切换到其(新创建的)目录,并使用node使用node运行它node <appname>
,然后打开http://localhost:3000
并查看。现在你在。
Node.js
本身提供了一个HTTP模块,其createServer方法返回一个可用于响应HTTP请求的对象。该对象继承了http.Server
原型。
中间件顾名思义,中间件实际上位于中间之间。中间是什么?请求和响应的中间.. 在此图片中,请求,响应,快速服务器如何位于快速应用程序中,您可以看到请求是来自客户端的,然后快速服务器将为这些请求提供服务。这样,整个快递服务器的整个任务就变成了小的单独任务。 中间件如何位于请求和响应之间小服务器部分执行某项特定任务并将请求传递给下一个..最终完成了所有任务的响应。所有中间件都可以访问请求对象,响应对象和请求的下一个功能响应周期
这是解释中间件Express youtube视频中中间件的好例子