javascript - Socket.io 未捕获类型错误 : Cannot read property 'apply' of undefined

标签 javascript socket.io

在我使用 socket.io 的程序中,特定事件不起作用。其余的工作正常。这是问题发生的地方:

第一个 html 文件:

 socket.on('connect', () => {socket.emit('phone', 'phone');});

服务器文件:

io.on('connection', function(socket){ 
   io.on('phone', function(socket, data){ 
      io.emit('stuurbedrijfsnaam', 'stuurbedrijfsnaam'); 
   }); 
});

第二个 html 文件:

socket.on('stuurbedrijfsnaam', function(socket){
    socket.emit('stuurbedrijfsnaam',bedrijfsnaam) 
})

这是控制台中给出的完整错误:

index.js:83 Uncaught TypeError: Cannot read property 'apply' of undefined
at r.emit (index.js:83)
at r.onevent (index.js:83)
at r.onpacket (index.js:83)
at r.<anonymous> (index.js:83)
at r.emit (index.js:83)
at r.ondecoded (index.js:83)
at a.<anonymous> (index.js:83)
at a.r.emit (index.js:83)
at a.add (index.js:83)
at r.ondata (index.js:83)
at r.<anonymous> (index.js:83)
at r.emit (index.js:83)
at r.onPacket (index.js:83)
at r.<anonymous> (index.js:83)
at r.emit (index.js:83)
at r.onPacket (index.js:83)
at r.onData (index.js:83)
at WebSocket.ws.onmessage (index.js:83)

它引用了 index.js:83,它位于 socket.io 本身创建的文件夹中。有第81、82、83行:

Backoff.prototype.setJitter = function(jitter){
    this.jitter = jitter;
    };

希望我提供了足够的资源。如果有人帮助我,那就太好了。谢谢!

最佳答案

此错误的原因是您试图通过自定义事件处理程序的 socket 参数调用 .emit()which is incorrect usage根据 socket.io 客户端 API 的文档。

考虑修改您的客户端代码,如下所示,从您的处理程序中删除 socket 参数,以便在实际的套接字实例上调用 .emit():

socket.on('stuurbedrijfsnaam', function(){ // remove 'socket' here

   // cause emit() to be called on actual socket instance
   socket.emit('stuurbedrijfsnaam',bedrijfsnaam) 
})

在您的第一个 html 文件中 socket.emit('phone', 'phone'); 的原因是 emit() 在原始套接字实例上被调用,而不是通过 socket 参数传递给事件处理程序,就像您在秒 html 文件中所做的那样。

希望对您有所帮助!

关于javascript - Socket.io 未捕获类型错误 : Cannot read property 'apply' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53311432/

相关文章:

javascript - 将套接字数据从一个用户 session 非异步传递到另一个用户 session

javascript - 从外部页面加载属性

javascript - 识别Javascript中的字符串格式

javascript - 字符串连接错误

javascript - 如何使用 javascript 访问 li 文本来创建新列表

node.js - 如何查看 socket.html 的输出?

javascript - Socket.io:发出消息是否将所有数据发送到所有客户端?

javascript - 如何通过正则表达式对以下字符串进行分组

javascript - 用户断开连接后删除 Canvas 和套接字 IO 中的形状

node.js - Node Express 设计用于避免 Socket.io 中的多个客户端