warum passiert das und wie kann ich es beheben? bitte helfen ~
irr von wo:
...\socket.io-adapter\index.js:195
if (fn) process.nextTick (fn.bind (null, null, sids));
socket.io-Version:
1.4.5
Ich habe den gleichen Fehler erhalten, als ich versucht habe, die Multiroom-Chat-Anwendung aus dem Buch „Node.js in Aktion“ zu erstellen.
<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)
Das Problem tritt auf, wenn Sie die Abhängigkeiten auf die neuesten Versionen aktualisieren:
"dependencies": {
"mime": "^1.3.4",
"socket.io": "^1.4.5"
}
während es funktioniert, wenn Sie die im Buch angegebenen Abhängigkeiten verwenden
"dependencies": {
"socket.io": "~0.9.6",
"mime": "~1.2.7"
}
Übrigens, bevor ich hier kommentiere, habe ich die Seite Migration from 0.9 von der socket.io-Site gelesen, aber ich habe keine Lösung gefunden.
Ich kann das einfache Chat-Projekt bei Bedarf irgendwo hochladen (es ist sehr klein).
Ich habe das Beispiel im Buch NodeJs in Aktion überprüft, und natürlich funktioniert es nicht, wenn Sie die neuesten Versionen von socket.io verwenden. Sie haben die folgenden 2 Zeilen, um es zum Laufen zu bringen:
Von:
var usersInRoom = io.sockets.clients(room);
Zu:
var usersInRoom = io.of('/').in(room).clients;
und von:
socket.emit('rooms', io.sockets.manager.rooms);
zu:
socket.emit('rooms', io.of('/').adapter.rooms);
Grüße!
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke Mann @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater . Aber für mich hat es nicht funktioniert, einfach var usersInRoom = io.of('/').in(room).clients;
zu ändern. Da dieser Client eine Funktion ist, die einen Rückruf als Parameter akzeptiert, hat das folgende Snippet für mich funktioniert.
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 is not defined : at findClientsSocket
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Danke @CheckMater
Hilfreichster Kommentar
Ich habe das Beispiel im Buch NodeJs in Aktion überprüft, und natürlich funktioniert es nicht, wenn Sie die neuesten Versionen von socket.io verwenden. Sie haben die folgenden 2 Zeilen, um es zum Laufen zu bringen:
Von:
var usersInRoom = io.sockets.clients(room);
Zu:
var usersInRoom = io.of('/').in(room).clients;
und von:
socket.emit('rooms', io.sockets.manager.rooms);
zu:
socket.emit('rooms', io.of('/').adapter.rooms);
Grüße!