当 require("http").Server() 使用 Express 应用程序作为参数进行评估时会发生什么?

Ale*_*oth 5 javascript node.js express

我在这里阅读了 Socket.io 聊天演示:http ://socket.io/get-started/chat/ ,在查看他们的 require 语句时我感到很困惑。

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

app.get('/', function(req, res){
res.sendfile('index.html');
});

io.on('connection', function(socket){
console.log('a user connected');
});

http.listen(3000, function(){
console.log('listening on *:3000');
});
Run Code Online (Sandbox Code Playgroud)

我认为require("express")生成一个可执行的 Express 函数(带有所有必要的函数和字段)并require("http").Server(app)创建一个 http.Server 对象及其所有字段和函数是否正确。

如果是这样,我很困惑,因为当我们调用 .listen 函数时 Express 创建了一个服务器,所以将 Express 应用程序传递给 http 模块服务器似乎是多余的和向后的。

所以,我的问题是,这里到底发生了什么?

Tim*_*ple 4

http 服务器需要一个具有以下签名的函数:

function(req, res)

require('express')();将创建一个具有该签名的函数,该函数处理 Express 提供的所有功能,如路由、中间件等。 Express可以创建它自己的 http 服务器实例,但由于您还使用了 socket.io (它需要访问 http 服务器)也),您将需要一个单独的 http 实例。