Socket.io: Socket.io 抛出 err:fn.bind is not a function

创建于 2016-02-04  ·  18评论  ·  资料来源: socketio/socket.io

为什么会发生,我该如何解决? 请帮忙~

从哪里出错:
...\socket.io 适配器\index.js:195
if (fn) process.nextTick(fn.bind(null, null, sids));

socket.io 版本:
1.4.5

最有用的评论

我检查了 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);

问候!

所有18条评论

我在尝试从“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

此页面是否有帮助?
0 / 5 - 0 等级