Socket.io: Socket.io a jeté err:fn.bind n'est pas une fonction

Créé le 4 févr. 2016  ·  18Commentaires  ·  Source: socketio/socket.io

pourquoi cela se produit-il et comment puis-je y remédier ? s'il vous plaît aidez-moi ~

erreur d'où :
...\socket.io-adapter\index.js:195
si (fn) process.nextTick(fn.bind(null, null, sids));

version de socket.io :
1.4.5

Commentaire le plus utile

J'ai vérifié l'exemple dans le livre NodeJs en action, et bien sûr cela ne fonctionnera pas si vous utilisez les dernières versions de socket.io, vous aurez les 2 lignes suivantes pour le faire fonctionner :

À partir de:
var usersInRoom = io.sockets.clients(room);

À:
var usersInRoom = io.of('/').in(room).clients;

et de:
socket.emit('rooms', io.sockets.manager.rooms);

à:
socket.emit('rooms', io.of('/').adapter.rooms);

Les salutations!

Tous les 18 commentaires

J'ai eu la même erreur en essayant de créer l'application de chat multiroom à partir du livre "Node.js en 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)

Le problème apparaît si vous mettez à jour les dépendances vers les dernières versions :

  "dependencies": {
    "mime": "^1.3.4",
    "socket.io": "^1.4.5"
  }

alors que cela fonctionne si vous utilisez les dépendances spécifiées par le livre

  "dependencies": {
    "socket.io": "~0.9.6",
    "mime": "~1.2.7"
  }

BTW, avant de commenter ici, j'ai lu la page Migration from 0.9 du site socket.io mais je n'ai pas trouvé de solution.

Je peux télécharger le projet de chat simple quelque part si nécessaire (c'est très petit).

J'ai vérifié l'exemple dans le livre NodeJs en action, et bien sûr cela ne fonctionnera pas si vous utilisez les dernières versions de socket.io, vous aurez les 2 lignes suivantes pour le faire fonctionner :

À partir de:
var usersInRoom = io.sockets.clients(room);

À:
var usersInRoom = io.of('/').in(room).clients;

et de:
socket.emit('rooms', io.sockets.manager.rooms);

à:
socket.emit('rooms', io.of('/').adapter.rooms);

Les salutations!

merci @CheckMater

merci @CheckMater

merci @CheckMater

merci @CheckMater

merci @CheckMater

Merci mec @CheckMater

merci @CheckMater

merci @CheckMater

merci @CheckMater

merci @CheckMater

Merci @CheckMater . Mais pour moi, changer simplement var usersInRoom = io.of('/').in(room).clients; n'a pas fonctionné. Comme ce client est une fonction qui prend un rappel comme paramètre, l'extrait ci-dessous a fonctionné pour moi.

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: rooms n'est pas défini : à findClientsSocket

merci @CheckMater

merci @CheckMater

merci @CheckMater

merci @CheckMater

Cette page vous a été utile?
0 / 5 - 0 notes