我正在尝试执行 .js 文件,但出现以下错误
显然给我带来问题的一段代码是
var io = require('socket.io').listen(app);
有人能说出问题是什么吗?我对 Javascript 和 Node.js 的经验很少:/
答案 0 :(得分:1)
整个事情有点令人困惑,因为 socket.io 支持各种初始化方法,并且根据您是要连接到现有的 http(s) 服务器还是让它创建自己的服务器而有所不同。
如果你只想要一个 socket.io 服务器,你可以这样做:
const io = require('socket.io')();
这使用 socket.io Server
工厂函数并传递默认选项(假定端口为 80)。
如果您想要一个既可以与 Express 一起使用又可以与 socket.io 一起使用的 http 服务器,您可以这样做:
// create http server and start it
const app = require('express')();
const server = app.listen();
// create socket.io server and bind it to an existing http server
const io = require('socket.io')(server);
或者这个:
// create Express listener instance
const app = require('express')();
// create http server and bind the Express listener instance to it
const server = http.createServer(app);
// create socket.io server and bind it to the existing http server
const io = require('socket.io')(server);
// start the http server
server.listen();
这两个都使用 socket.io Server
工厂函数,并传递给它一个现有的 http 服务器对象,它将共享和连接。
或者(这个语法不常用),如果你想自己更刻意地创建一个独立的socket.io服务器实例:
// Load socket.io Server class from socket.io module
const { Server } = require("socket.io");
// create socket.io server instance
const io = new Server();
// start socket.io server
io.listen();
由于以下几个原因,您的代码无法正常工作:
require('socket.io')
返回一个没有 Server
方法的 .listen()
工厂函数。您需要一个服务器实例来获取 .listen()
方法。app
传递给 socket.io 实例。当您使用 app
创建该服务器时,您将 http.createServer()
传递给一个 http 服务器实例,或者您使用 app.listen()
自动将它们连接在一起,.listen()
会在该 .listen()
方法中为您创建 http 服务器.仅供参考,socket.io Server
实例上的 socket.io Server
方法可以接受端口号(如果未通过则默认为 80),也可以接受现有的、已经创建的http 服务器实例。 require('socket.io')
返回的 app
类工厂函数也将接受上述两种类型的参数。
仅供参考,我假设您使用 Express 是因为您使用了 app
变量。如果不是这种情况,请显示其余代码,说明 top
是什么以及它来自哪里。