为什么会发生,我该如何解决? 请帮忙~
从哪里出错:
...\socket.io 适配器\index.js:195
if (fn) process.nextTick(fn.bind(null, null, sids));
socket.io 版本:
1.4.5
我在尝试从“Node.js in action”一书中构建多房间聊天应用程序时遇到了同样的错误
<MY_PATH>\chatrooms\node_modules\socket.io-adapter\index.js:195
if (fn) process.nextTick(fn.bind(null, null, sids));
^
TypeError: fn.bind is not a function
at Adapter.clients (<MY_PATH>\chatrooms\node_modules\socket.io-adapter\index.js:195:31)
at Namespace.clients (<MY_PATH>\chatrooms\node_modules\socket.io\lib\namespace.js:253:16)
at joinRoom (<MY_PATH>\chatrooms\lib\chat_server.js:71:32)
at Namespace.<anonymous> (<MY_PATH>\chatrooms\lib\chat_server.js:20:5)
at emitOne (events.js:90:13)
at Namespace.emit (events.js:182:7)
at Namespace.emit (<MY_PATH>\chatrooms\node_modules\socket.io\lib\namespace.js:206:10)
at <MY_PATH>\chatrooms\node_modules\socket.io\lib\namespace.js:174:14
at _combinedTickCallback (node.js:370:9)
at process._tickCallback (node.js:401:11)
如果您将依赖项更新到最新版本,则会出现此问题:
"dependencies": {
"mime": "^1.3.4",
"socket.io": "^1.4.5"
}
如果您使用本书指定的依赖项,它会起作用
"dependencies": {
"socket.io": "~0.9.6",
"mime": "~1.2.7"
}
顺便说一句,在这里发表评论之前,我已经从 socket.io 网站阅读了Migration from 0.9页面,但我还没有找到解决方案。
如果需要,我可以将简单的聊天项目上传到某个地方(它非常小)。
我检查了 NodeJs in action 一书中的示例,当然如果您使用最新版本的 socket.io,它将无法工作,您将拥有以下 2 行来使其工作:
从:
var usersInRoom = io.sockets.clients(room);
到:
var usersInRoom = io.of('/').in(room).clients;
并来自:
socket.emit('rooms', io.sockets.manager.rooms);
到:
socket.emit('rooms', io.of('/').adapter.rooms);
问候!
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater 。 但对我来说,简单地改变var usersInRoom = io.of('/').in(room).clients;
并没有奏效。 由于此客户端是一个将回调作为参数的函数,因此下面的代码片段对我有用。
io.of('/').in(room).clients(function(error,clients){
var otherUsers = [];
for(var i in clients){
if(socket.id != clients[i]) otherUsers.push(nickNames[clients[i]]);
}
var userSummary = 'Users Currently in ' + room + ' are : ' + otherUsers.join(', ') + '.';
socket.emit('message',{text:userSummary});
});
console.log(io.of('/').in(room).clients);
ReferenceError:未定义房间:在 findClientsSocket
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
谢谢@CheckMater
最有用的评论
我检查了 NodeJs in action 一书中的示例,当然如果您使用最新版本的 socket.io,它将无法工作,您将拥有以下 2 行来使其工作:
从:
var usersInRoom = io.sockets.clients(room);
到:
var usersInRoom = io.of('/').in(room).clients;
并来自:
socket.emit('rooms', io.sockets.manager.rooms);
到:
socket.emit('rooms', io.of('/').adapter.rooms);
问候!