Socket.io: Socket.io warf err:fn.bind ist keine Funktion

Erstellt am 4. Feb. 2016  ·  18Kommentare  ·  Quelle: socketio/socket.io

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

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!

Alle 18 Kommentare

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

varHarrie picture varHarrie  ·  3Kommentare

Aweather picture Aweather  ·  4Kommentare

stnwk picture stnwk  ·  4Kommentare

kootoopas picture kootoopas  ·  4Kommentare

adammw picture adammw  ·  4Kommentare