Express.js – app.listen与server.listen

这可能是一个非常基本的问题,但我根本不明白。 例如,使用Express.js创build应用程序和启动监听端口1234的应用程序有什么区别:

var express = require('express'); var app = express(); //app.configure, app.use etc app.listen(1234); 

并添加一个http服务器:

 var express = require('express'), http = require('http'); var app = express(); var server = http.createServer(app); //app.configure, app.use etc server.listen(1234); 

有什么不同? 如果我导航到http://localhost:1234 – 我得到相同的输出…

第二种forms(自己创build一个HTTP服务器,而不是为你创build一个HTTP服务器)对于重用HTTP服务器很有用,例如在同一个HTTP服务器实例中运行socket.io

 var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); ... server.listen(1234); 

然而, app.listen()也会返回HTTP服务器实例,所以稍微重写一下,你可以在不创buildHTTP服务器的情况下实现类似的function:

 var express = require('express'); var app = express(); // app.use/routes/etc... var server = app.listen(3033); var io = require('socket.io').listen(server); io.sockets.on('connection', function (socket) { ... }); 

还有一个使用应用程序的差异,听http服务器是当你想要设置为https服务器

要设置https,您需要下面的代码:

 var https = require('https'); var server = https.createServer(app).listen(config.port, function() { console.log('Https App started'); }); 

express的应用程序只会返回http服务器,不能设置为express,所以您需要使用https服务器命令

 var express = require('express'); var app = express(); app.listen(1234); 

Express基本上是一个http模块的包装,是为了方便开发人员创build的..

  1. 他们可以设置中间件来使用express来轻松地响应HTTP请求。
  2. 他们可以dynamic呈现HTML页面的基础上传递参数模板使用快递。
  3. 他们还可以使用快捷方式轻松定义路由。

只是为了守时的目的,并延长了一下Tim的答案。
从官方文件 :

express()返回的应用程序实际上是一个JavaScript函数,被devise为通过节点的HTTP服务器作为处理请求的callback。

这使得使用相同的代码库可以轻松地为应用程序提供HTTP和HTTPS版本,因为应用程序不会从这些代码inheritance(它只是一个callback):

 http.createServer(app).listen(80); https.createServer(options, app).listen(443); 

app.listen()方法返回一个http.Server对象,对于HTTP来说,这是一个方便的方法

 app.listen = function() { var server = http.createServer(this); return server.listen.apply(server, arguments); }; 

我带着同样的问题,但谷歌后,我发现没有太大的区别:)

从Github

如果你想创build一个HTTP和HTTPS服务器,你可以使用“http”和“https”模块来完成,如下所示。

 /** * Listen for connections. * * A node `http.Server` is returned, with this * application (which is a `Function`) as its * callback. If you wish to create both an HTTP * and HTTPS server you may do so with the "http" * and "https" modules as shown here: * * var http = require('http') * , https = require('https') * , express = require('express') * , app = express(); * * http.createServer(app).listen(80); * https.createServer({ ... }, app).listen(443); * * @return {http.Server} * @api public */ app.listen = function(){ var server = http.createServer(this); return server.listen.apply(server, arguments); }; 

另外如果你想用socket.io来看看他们的例子

看到这个

我更喜欢app.listen() 🙂