这可能是一个非常基本的问题,但我就是不明白。使用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,那么我将得到相同的输出。
如果您想重用HTTP服务器(例如运行套接字),第二种形式(您自己创建一个HTTP服务器,而不是让Express为您创建一个)非常有用。io在同一个HTTP服务器实例中:
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) {
...
});
使用应用程序和监听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);
我也有同样的问题,但谷歌之后,我发现没有太大的区别:)
从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看他们的例子
看到这个
我更喜欢app.listen():)
只是为了准时,延长一点蒂姆回答。
来自官方文件:
express()返回的应用程序实际上是一个JavaScript函数,
设计为传递给节点的HTTP服务器作为回调处理
请求。
这使得同时提供HTTP和HTTPS版本的
应用程序具有相同的代码库,因为应用程序不继承这些
(它只是一个回调):
var https =require('https');
var http = require('http');
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);
app.listen()方法返回一个http。服务器对象和(用于HTTP)
是一个方便的方法如下:
app.listen = function() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};