为什么许多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
则需要自己实例化服务器。