当我已经快递时,为什么我需要添加“require(”http“)”?

时间:2018-04-14 13:45:19

标签: node.js express socket.io

我正在尝试按照本教程使用socket.io创建一个简单的聊天应用程序。我在教程的一部分,我必须将下面的所有代码插入到js文件中并启动它。我只是不明白为什么第二个代码存在,我听说express可以做比http更多的事情。而不是使用“http.listen”代码,不能使用“app.listen”而不是“app”传递给“io”?

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

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

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

http.listen(3000, function(){
  console.log('listening on *:3000');
});

2 个答案:

答案 0 :(得分:0)

你是对的。 Express是一个位于nodejs应用程序之上的框架,它提供了一个更容易,提供更多中间件来处理路由,会话和cookie以及更有效的方式来创建服务器

   Sub Opgave3()
   Dim n As Long
   n = WorksheetFunction.CountIf(Columns(9), "1")
   If n = 1 Then _
   MsgBox "All in Fakultet:" & n & "123", vbInformation, "Heres the answer"
   End Sub

在此示例中,为了在不同通道之间创建套接字,您必须使用HTTP来指示套接字用于处理HTTP请求/响应。你根本无法将整个快递申请传递给io。

答案 1 :(得分:0)

  

为什么我已经快递时需要添加“require(”http“)”

您不必自己手动加载http模块。您使用express为您创建一个http服务器(它将为您加载http模块)并将其与socket.io集成,而无需像这样手动加载htttp模块:

const app = require('express')();

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

const server = app.listen(3000, function(){
  console.log('listening on *:3000');
});

const io = require('socket.io')(server);

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

在内部,app.listen()为您加载http模块,创建一个服务器然后启动它,返回server对象,然后可以将其与socket.io一起使用。

在express中,这是app.listen()

的代码
const http = require('http');

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

所以,有人必须加载http模块。如果您使用app.listen(),快递将为您完成。