这可能是一个非常基本的问题,但我就是不明白。使用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);

Express基本上是一个http模块的包装器,它是为了方便开发人员而创建的。

他们可以使用express设置中间件来(轻松地)响应HTTP请求。 它们可以基于使用express向模板传递参数来动态呈现HTML页面。 它们还可以使用express轻松地定义路由。


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

从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);
};