[英]TypeError: require(…).listen is not a function ERROR
我正在尝试执行 a.js 文件并给我以下错误
显然给我带来问题的代码是
var io = require('socket.io').listen(app);
有人能说出问题所在吗? 我对 Javascript 和 Node.js 的经验很少:/
这整个事情有点令人困惑,因为 socket.io 支持各种初始化它的方式,并且根据您是要连接到现有的 http(s) 服务器还是让它创建自己的服务器,会有一些变化。
如果您只想要一个 socket.io 服务器本身,您可以这样做:
const io = require('socket.io')();
这使用 socket.io Server
工厂 function 并传递默认选项(假定端口 80)。
如果你想要一个 http 服务器,你可以同时使用 Express 和 socket.io,你可以这样做:
// 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
工厂 function 并将其传递给现有的 http 服务器 ZA8CFDE6331BD49EB2ACZ66B8 将共享它。
或者(这种语法不经常使用),如果您想更刻意地自己创建一个独立的 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')
返回一个没有.listen()
方法的Server
工厂 function。 您需要一个服务器实例来获取.listen()
方法。app
传递给 socket.io 实例。 当您使用http.createServer()
创建该服务器时,您将app
传递给 http 服务器实例,或者您使用app.listen()
自动将它们挂钩在一起,它会为您创建.listen()
方法。 仅供参考,socket.io Server
实例上的 socket.io .listen()
方法可以接受端口号(如果未通过,则默认为 80),或者它可以接受现有的、已创建的 Z80791B3AE7002FAACB88C24688876 服务器实例。 Server
class 工厂 function 这是require('socket.io')
返回的内容,也将接受这两种类型的 arguments,如上图所示。
仅供参考,我假设您使用的是 Express,因为您使用了app
变量。 如果不是这种情况,那么请显示代码的 rest,以显示app
是什么以及它来自哪里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.