为什么许多express.js(web框架)的例子附加express对象到http对象?

在这个例子中,将express对象传递给http对象有什么意义?

 var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); 

很多例子都是这样的。 我不太清楚这是什么意思。

其他一些例子根本不使用http 。 这里是Express.js网站( http://expressjs.com/starter/hello-world.html )的例子,它不使用http对象:

 var express = require('express') var app = express() app.get('/', function (req, res) { res.send('Hello World!') }) var server = app.listen(3000, function () { var host = server.address().address var port = server.address().port console.log('Example app listening at http://%s:%s', host, port) }) 

有什么区别吗? 第二个例子是否仍然使用http ? 还是使用快递自己的http服务器?

在第一个例子中, http模块的Server方法被调用,这实际上是createServer的别名。 你可以在这里看到相关的行 。 该参数本质上是一个接受参数request的函数, response如预期的requestListener 。

在第二个示例中,Express已经在其自己的模块中要求http ,所以用户不需要明确地要求。

主要区别在于你在前者自己创build一个http.Server实例,而Express在后者中为你创build一个服务器实例 。 如果您希望使用https模块而不是http则需要自己实例化服务器。