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的..
- 他们可以设置中间件来使用express来轻松地响应HTTP请求。
- 他们可以dynamic呈现HTML页面的基础上传递参数模板使用快递。
- 他们还可以使用快捷方式轻松定义路由。
只是为了守时的目的,并延长了一下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()
🙂