TypeError: require(...).listen 不是函数

Posted

技术标签:

【中文标题】TypeError: require(...).listen 不是函数【英文标题】:TypeError: require(...).listen is not a function 【发布时间】:2021-03-03 12:47:40 【问题描述】:

我写了这个,但出现错误,我不知道如何修复

var http = require('http');
var clienthtml = require('fs').readFileSync('client.html');

var plainHttpServer = http.createServer(function (request, response) 
response.writeHead(200,  'Content-Type': 'text/html' );
response.end(clientHtml);
).listen(8080);

var files = require('fs');

var io = require('socket.io').listen(plainHttpServer);
io.set('origins', ['localhost:8080', '127.0.0.1:8080']);

这个错误来了,我不知道如何解决,告诉我

var io = require('socket.io').listen(plainHttpServer);
                          ^

TypeError: require(...).listen is not a function

【问题讨论】:

是的,@Abra 是正确的,这看起来像 javascript。但是,错误是说 require() 没有返回可以使用函数 listen() 的东西 你安装了Node包socket.io了吗?在您的命令行中,在包含该节点脚本的目录中,执行npm install socket.io 【参考方案1】:

require('socket.io') 返回 socket.io 服务器类。它是一个类,而不是一个实例,因此不是你称之为.listen() 的东西。正如您所见here in the doc 所示,根据您要完成的具体任务,您可以通过多种不同的方式使用该Server 类。例如,您可以这样做:

const Server = require('socket.io');
const io = new Server(somePort);

或者这个:

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

或共享现有的 http 服务器:

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

【讨论】:

只是补充一下 - 最新版本之前的版本确实支持 listen() 函数【参考方案2】:

下面的 sn-p 对我有用:

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

【讨论】:

以上是关于TypeError: require(...).listen 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:某些东西不是函数

获取 TypeError:wsc.require 不是 hyco-ws npm 包的功能

TypeError:无法读取未定义的属性“缓冲区”

TypeError:upload.single不是一个函数

NodeJs : TypeError: require(...) is not a function

TypeError: undefined is not an object(评估 '_$$_REQUIRE(_dependencyMap[9], "../../config/FIREBASE