它的实现方式非常简单(and in fact the code is really short!)。只要你调用var connect = require('connect'); var app = connect();,你就会得到一个函数app,它可以: 1.可以处理一个请求并返回一个响应。这是因为你基本上得到了这个函数 1.有一个成员函数.use(源代码)来管理 * 插件 *(that comes from here,因为这行代码很简单)。 由于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);
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');
相关信息,特别是如果您使用NTVS使用Visual Studio IDE。NTVS将NodeJS和Express工具,脚手架,项目模板添加到Visual Studio 2012,2013中。 此外,将ExpressJS或Connect称为“WebServer”的措辞是不正确的。您可以使用或不使用它们来创建基本的WebServer。基本的NodeJS程序也可以使用http模块来处理http请求,从而成为一个基本的Web服务器。
9条答案
按热度按时间dxxyhpgq1#
【**更新:**Express从4.0版本开始不再使用Connect,但Express仍然兼容为Connect编写的中间件,我的原始答案如下。】
我很高兴你问到这个问题,因为对于那些关注Node.js的人来说,这绝对是一个常见的困惑点。下面是我最好的解释:
createServer
方法返回一个对象,您可以使用该对象来响应HTTP请求。该对象继承了http.Server
原型。createServer
方法,它返回一个继承http.Server
扩展版本的对象。Connect的扩展主要是为了方便插入middleware。这就是为什么Connect将自己描述为“中间件框架”,并且经常被类比为Ruby的Rack。createServer
方法,扩展了Connect的Server
原型。所以Connect的所有功能都在那里,* 加上 * 视图渲染和一个方便的DSL来描述路由。Ruby的Sinatra是一个很好的类比。这里有一个具体的例子来说明“中间件”的含义:以上这些工具都不能为你提供静态文件,但是只要把
connect.static
(Connect附带的中间件)配置成指向一个目录,你的服务器就可以访问该目录中的文件。express.static
与connect.static
相同。(直到最近,两者都被称为staticProvider
。)我的印象是,现在大多数“真实的的”Node.js应用程序都是用Express开发的;它添加的特性非常有用,如果您需要,所有较低级别的功能仍然存在。
0x6upsns2#
接受的答案是真的老(现在是错误的).这里的信息(与源)基于当前版本的连接(3.0)/快递(4.0).
Node.js自带的功能
http/https
createServer
,它只接受回调(req,res),例如connect增加了什么
Middleware基本上是位于您的应用程序代码和一些底层API之间的任何软件。Connect扩展了内置的HTTP服务器功能,并添加了插件框架。插件充当中间件,因此Connect是一个 * 中间件框架 *
它的实现方式非常简单(and in fact the code is really short!)。只要你调用
var connect = require('connect'); var app = connect();
,你就会得到一个函数app
,它可以:1.可以处理一个请求并返回一个响应。这是因为你基本上得到了这个函数
1.有一个成员函数
.use
(源代码)来管理 * 插件 *(that comes from here,因为这行代码很简单)。由于1.),您可以执行以下操作:
合并2.),你得到:
Connect提供了一个实用程序函数来将其自身注册到
http
,这样您就不需要调用http.createServer(app)
。它被称为listen
,代码只是创建一个新的http服务器,register的connect作为回调函数,并将参数转发到http.listen
。因此,您可以:
它仍然是你的好老
http.createServer
与插件框架之上。ExpressJS增加了什么
ExpressJS和connect是并行的项目。Connect * 只是 * 一个中间件框架,有一个很好的
use
函数。Express不依赖于Connect(参见package.json)。但是它做了connect所做的一切,即:1.可以像connect一样使用
createServer
注册,因为它也只是一个可以接受req
/res
对的函数(源代码)。1.注册中间件的use函数。
1.一个实用程序
listen
函数,用于向http注册自身除了connect提供的功能(表示重复)之外,它还有一堆更多的功能。
1.有视图引擎支持。
1.路由器有顶级动词(get/post等)。
1.支持应用程序设置。
中间件为 * 共享 *
ExpressJS * 和 * connect的
use
功能是兼容的,因此 * 中间件是共享的 *。两者都是中间件框架,express只是有更多的 * 简单的中间件框架 *。你应该用哪一个?
我的意见是:基于上述情况,你已经有了足够的信息来做出自己的选择。
http.createServer
。http.createServer
之上的一个很好的抽象。大多数人应该只使用ExpressJS。
接受的答案有什么错
这些在某个时间点可能是正确的,但现在是错误的:
它继承了http.Server的扩展版本
错。它没有扩展它,正如你所看到的... * 使用它 *
Express对Connect的作用与Connect对http模块的作用相同
Express 4.0甚至不依赖于connect。请参阅当前的package.json依赖项部分
n3h0vuf23#
node.js
Node.js是服务器端的JavaScript引擎。
除了所有的js功能外,它还包括网络功能(如HTTP)和对文件系统的访问。
这与客户端js不同,在客户端js中,网络任务由浏览器独占,并且出于安全原因禁止访问文件系统。
node.js作为web服务器:快车
在服务器上运行的东西,理解HTTP,可以访问文件,听起来像一个Web服务器,但它不是。
要使node.js像Web服务器一样工作,必须对它进行编程:处理传入的HTTP请求并提供适当的响应。
这就是Express所做的:这是一个用js实现的web服务器。
因此,实现一个网站就像配置快速路由,并编程网站的特定功能。
中间件及连接
提供页面服务涉及许多任务,其中许多任务是众所周知的,也是非常常见的,因此node的Connect模块(node下运行的众多模块之一)实现了这些任务。
查看当前令人印象深刻的产品:
*loggerrequest logger,支持自定义格式
*csrf跨站点请求伪造保护
*compressGzip压缩中间件
*basicAuth基础http认证
*bodyParser可扩展请求体解析器
*jsonapplication/json parser
*urlencodedapplication/x-www-form-urlencoded解析器
*multipartmultipart/form-data parser
*timeout请求超时
*cookieParsercookie解析器
*session捆绑MemoryStore的会话管理支持
*cookieSession基于cookie的会话支持
*methodOverridefaux HTTP方法支持
*responseTime计算响应时间,并通过X-Response-Time公开
*staticCachestatic()中间件的内存缓存层
*静态流式静态文件服务器支持Range等
*目录目录列表中间件
*vhost虚拟主机子域Map中间件
*favicon高效favicon服务器(默认图标)
*limit限制请求正文的字节大小
*query自动querystring解析器,填充req.query
*errorHandler灵活的错误处理器
Connect是一个框架,通过它你可以选择你需要的(子)模块。
Contrib Middleware页面列举了一长串额外的 * 中间件 *。
Express本身带有最常见的Connect中间件。
怎么办?
安装node.js。
Node自带 npm,即 *node包管理器 *。
命令
npm install -g express
将下载并全局安装express(检查express guide)。在命令行中(而不是在node中)运行
express foo
将创建一个名为foo的随时可以运行的应用程序。切换到它的(新创建的)目录,并使用命令node <appname>
和node运行它,然后打开http://localhost:3000
并查看。现在您已经进入了。wlzqhblo4#
Connect为常见的HTTP服务器功能(如会话管理、身份验证、日志记录等)提供了“更高级别”的API。Express构建在Connect之上,具有高级(类似Sinatra)功能。
bqf10yzr5#
Node.js
本身提供了一个HTTP模块,其 createServer 方法返回一个对象,您可以使用该对象来响应HTTP请求。该对象继承了http.Server
原型。8ehkhllq6#
相关信息,特别是如果您使用NTVS使用Visual Studio IDE。NTVS将NodeJS和Express工具,脚手架,项目模板添加到Visual Studio 2012,2013中。
此外,将ExpressJS或Connect称为“WebServer”的措辞是不正确的。您可以使用或不使用它们来创建基本的WebServer。基本的NodeJS程序也可以使用http模块来处理http请求,从而成为一个基本的Web服务器。
xpcnnkqh7#
中间件顾名思义,实际上中间件是坐在中间..中间什么?中间的请求和响应.. how request,response,express server sit in express app在这张图片中,你可以看到请求来自客户端,然后Express服务器服务器服务这些请求..然后让我们深入挖掘..实际上我们可以将整个Express服务器的整个任务划分为小的单独任务,就像这样。how middleware sit between request and response一小块服务器部件执行某些特定任务并将请求传递给下一个..最后完成所有任务响应已完成..所有中间件可以访问请求对象,响应对象和请求响应周期的下一个函数..
这是解释express youtube video for middleware中的中间件的好例子
sqxo8psd8#
中间件是运行在请求传入和响应从我们的API发出之间或中间的特殊函数。
这里Next在ExpressJS中用作请求和RE之间中间件
1wnzp6jl9#
愚蠢的简单答案
Connect和Express是nodejs的Web服务器。与Apache和IIS不同,它们可以使用相同的模块,称为“中间件”。