在我使用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;
};
希望我给了足够的资源。如果有人帮助我,那将很酷。谢谢!
答案 0 :(得分:3)
此错误的原因是,您正在尝试根据自定义事件处理程序的.emit()
参数which is incorrect usage调用socket
,具体方法取决于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文件中。
希望有帮助!
答案 1 :(得分:1)
对于任何搜索此错误的人。这可能是由于在.on
方法中提供未定义的变量作为第二个参数而引起的。 socket.io的内部代码尝试调用.apply
方法来将参数传递到事件处理程序中。如果注册的函数不存在,因此undefined
不存在,则将发生此错误,因为未定义的值没有这样的属性。函数名称中经常出现错字
即
socket.on('next_player', this.nextplayer)
应为:
socket.on('next_player', this.next_player)