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
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
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!