til*_*lda 626 middleware node.js
尽管我非常了解JavaScript,但我很困惑Node.js生态系统中这三个项目究竟是做什么的.它是否像Rails的机架?有人可以解释一下吗?
Tre*_*ham 880
[ 更新:自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开发的.它添加的功能非常有用,如果你需要它,所有的低级功能仍然存在.
bas*_*rat 154
接受的答案真的很旧(现在错了).这是基于当前版本的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);
Run Code Online (Sandbox Code Playgroud)
中间件基本上是位于应用程序代码和某些低级API之间的任何软件.Connect扩展了内置的HTTP服务器功能并添加了一个插件框架.插件充当中间件,因此连接是一个中间件框架
它的方式非常简单(实际上代码非常简短!).一旦打电话给var connect = require('connect'); var app = connect();你,你就会得到一个app能够:
由于1.)您可以执行以下操作:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Run Code Online (Sandbox Code Playgroud)
结合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);
Run Code Online (Sandbox Code Playgroud)
Connect提供了一个实用程序功能来注册自己,http这样您就不需要进行调用http.createServer(app).它被调用listen并且代码只是创建一个新的http服务器,寄存器的connect作为回调并转发参数http.listen.从来源
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Run Code Online (Sandbox Code Playgroud)
所以,你可以这样做:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
Run Code Online (Sandbox Code Playgroud)
http.createServer顶部有一个插件框架,它仍然是你的好老.
ExpressJS和connect是并行项目.Connect 只是一个中间件框架,具有很好的use功能.Express不依赖于Connect(请参阅package.json).然而,它确实连接所做的一切,即:
createServer类似连接注册,因为它也只是一个可以采用req/ respair(源)的函数.listen函数,用于注册自己的http除了提供连接(表示重复)之外,它还有许多更多功能.例如
useExpressJS 和 connect 的功能兼容,因此中间件是共享的.两者都是中间件框架,表达只是一个简单的中间件框架.
我的意见:你已经足够了解^基于以上^来做出自己的选择.
http.createServer如果要创建像从头连接/ expressjs.http.createServer大多数人应该只使用ExpressJS.
这些可能在某个时间点是真的,但现在错了:
继承了http.Server的扩展版本
错误.它没有扩展它,正如你所看到的...... 使用它
Express确实将Connect所做的事情连接到http模块
Express 4.0甚至不依赖于连接.请参阅当前的package.json依赖项部分
Jua*_*nus 67
Node.js是服务器端的javascript电机.
除了所有js功能外,它还包括网络功能(如HTTP)和对文件系统的访问.
这与浏览器垄断网络任务的客户端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 foo在命令行(而不是在节点)将创建一个随时可以运行的应用程序名为foo.切换到(新创建的)目录并使用命令运行它node <appname>,然后打开http://localhost:3000并查看.现在你在.
yoj*_*o87 16
Connect为常见的HTTP服务器功能提供了"更高级别"的API,如会话管理,身份验证,日志记录等.Express基于Connect with advanced(Sinatra like)功能构建.
| 归档时间: |
|
| 查看次数: |
139160 次 |
| 最近记录: |