尽管我很了解JavaScript,但我还是不明白Node.js生态系统中的这三个项目到底是做什么的。是不是有点像《Rails’Rack》?有人能解释一下吗?
当前回答
公认的答案已经过时了(现在也是错误的)。以下是基于Connect (3.0) / Express(4.0)当前版本的信息(附源代码)。
Node.js自带什么
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();你得到一个功能应用程序,可以:
可以处理请求并返回响应。这是因为你基本上得到了这个函数 有一个成员函数.use (source)来管理插件(因为这一行简单的代码来自这里)。
因为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服务器,将connect注册为回调并将参数转发给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增加了什么
ExpressJS和connect是并行项目。Connect只是一个中间件框架,具有很好的使用功能。Express不依赖于Connect(参见package.json)。然而,它做的一切连接,即:
可以像connect一样注册createServer,因为它也是一个可以接受req/res对的函数(源)。 一个用来注册中间件的use函数。 一个实用程序监听函数将自己注册到http
除了connect提供的功能(表示副本)之外,它还有许多其他特性。如。
具有视图引擎支持。 路由器有顶级动词(get/post等)。 具有应用程序设置支持。
共享中间件
ExpressJS和connect的使用功能是兼容的,因此中间件是共享的。两者都是中间件框架,express不仅仅是一个简单的中间件框架。
你应该使用哪一个?
我的观点是:基于上述,你已经得到了足够的信息来做出自己的选择。
使用http。如果你从头开始创建connect / expressjs之类的东西,请创建createServer。 如果你正在编写中间件,测试协议等,请使用connect,因为它是http.createServer之上的一个很好的抽象 如果你正在编写网站,请使用ExpressJS。
大多数人应该只使用ExpressJS。
公认的答案有什么问题
在某些时候,这些可能是正确的,但现在是错误的:
它继承了http的扩展版本。服务器
错了。它没有延伸,正如你所看到的……使用它
Express对Connect的作用与Connect对http模块的作用相同
Express 4.0甚至不依赖于连接。查看当前包。Json依赖项部分
其他回答
愚蠢的简单答案
Connect和Express是nodejs的web服务器。与Apache和IIS不同,它们都可以使用相同的模块,称为“中间件”。
Connect为常见的HTTP服务器功能(如会话管理、身份验证、日志记录等)提供了“更高级别”的api。Express是建立在具有高级功能(类似Sinatra)的Connect之上的。
公认的答案已经过时了(现在也是错误的)。以下是基于Connect (3.0) / Express(4.0)当前版本的信息(附源代码)。
Node.js自带什么
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();你得到一个功能应用程序,可以:
可以处理请求并返回响应。这是因为你基本上得到了这个函数 有一个成员函数.use (source)来管理插件(因为这一行简单的代码来自这里)。
因为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服务器,将connect注册为回调并将参数转发给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增加了什么
ExpressJS和connect是并行项目。Connect只是一个中间件框架,具有很好的使用功能。Express不依赖于Connect(参见package.json)。然而,它做的一切连接,即:
可以像connect一样注册createServer,因为它也是一个可以接受req/res对的函数(源)。 一个用来注册中间件的use函数。 一个实用程序监听函数将自己注册到http
除了connect提供的功能(表示副本)之外,它还有许多其他特性。如。
具有视图引擎支持。 路由器有顶级动词(get/post等)。 具有应用程序设置支持。
共享中间件
ExpressJS和connect的使用功能是兼容的,因此中间件是共享的。两者都是中间件框架,express不仅仅是一个简单的中间件框架。
你应该使用哪一个?
我的观点是:基于上述,你已经得到了足够的信息来做出自己的选择。
使用http。如果你从头开始创建connect / expressjs之类的东西,请创建createServer。 如果你正在编写中间件,测试协议等,请使用connect,因为它是http.createServer之上的一个很好的抽象 如果你正在编写网站,请使用ExpressJS。
大多数人应该只使用ExpressJS。
公认的答案有什么问题
在某些时候,这些可能是正确的,但现在是错误的:
它继承了http的扩展版本。服务器
错了。它没有延伸,正如你所看到的……使用它
Express对Connect的作用与Connect对http模块的作用相同
Express 4.0甚至不依赖于连接。查看当前包。Json依赖项部分
相关信息,特别是如果您正在使用NTVS与Visual Studio IDE一起工作。NTVS将NodeJS和Express工具,脚手架,项目模板添加到Visual Studio 2012, 2013。
此外,将ExpressJS或Connect作为“WebServer”调用的措辞是不正确的。您可以使用或不使用它们来创建一个基本的WebServer。一个基本的NodeJS程序也可以使用http模块来处理http请求,从而成为一个基本的web服务器。
Node.js本身提供了一个HTTP模块,其createServer方法返回一个对象,您可以使用该对象响应HTTP请求。该对象继承了http。服务器原型。
推荐文章
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项
- this.libOptions.parse不是一个函数
- 对嵌套文件夹运行npm install的最好方法是什么?
- 节点Multer异常字段
- 很好的初学者教程socket.io?
- CALL_AND_RETRY_LAST分配失败-进程内存不足
- 在Ubuntu上安装Node.js
- 使用express.js代理
- Node -使用NODE_MODULE_VERSION 51根据不同的Node.js版本编译
- RabbitMQ / AMQP:单队列,同一消息的多个消费者?
- Node.js同步执行系统命令
- 禁用包的postinstall脚本
- Node.js上的html解析器
- 错误:无法找到模块“webpack”