这可能是一个非常基本的问题,但我根本就没有得到它。使用 Express.js 创建应用程序和启动应用程序侦听端口1234之间有什么区别,例如:
var express = require('express');
var app = express();
//app.configure, app.use etc
app.listen(1234);
并添加http服务器:
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
//app.configure, app.use etc
server.listen(1234);
有什么区别?
如果我导航到http://localhost:1234
,那么我得到相同的输出。
答案 0 :(得分:471)
如果要重用HTTP服务器,例如在同一个HTTP服务器实例中运行socket.io
,第二种形式(自己创建HTTP服务器,而不是让Express为您创建一个)是很有用的: / p>
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服务器实例,所以通过一些重写,您可以实现类似的功能,而无需自己创建HTTP服务器:
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) {
...
});
答案 1 :(得分:48)
使用该应用程序还有一个区别,当您要为https服务器设置时,正在侦听http服务器
要设置https,您需要以下代码:
var https = require('https');
var server = https.createServer(app).listen(config.port, function() {
console.log('Https App started');
});
来自快递的app只会返回http服务器,你不能在express中设置它,所以你需要使用https服务器命令
var express = require('express');
var app = express();
app.listen(1234);
答案 2 :(得分:17)
只是为了守时的目的并延长一点蒂姆的回答 来自official documentation:
express()返回的app实际上是一个JavaScript函数, 设计为通过到Node的HTTP服务器作为回调来处理 请求。
这样可以轻松提供您的HTTP和HTTPS版本 具有相同代码库的应用程序,因为应用程序不会从这些继承 (这只是一个回调):
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);
};
答案 3 :(得分:5)
Express基本上是http模块的包装器,它是为了方便开发人员而创建的..
答案 4 :(得分:4)
我提出了同样的问题,但在谷歌之后,我发现没有太大区别:)
来自Github
如果您希望同时创建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,请参阅他们的example
请参阅this
我更喜欢app.listen()
:)