Socket.io: Socket.ioがerr:fn.bindをスローしましたが関数ではありません

作成日 2016年02月04日  ·  18コメント  ·  ソース: socketio/socket.io

なぜそれが起こるのですか、どうすれば修正できますか? 助けてください〜

どこからエラー:
... \ socket.io-adapter \ index.js:195
if(fn)process.nextTick(fn.bind(null、null、sids));

socket.ioバージョン:
1.4.5

最も参考になるコメント

「NodeJsの動作」という本の例を確認しました。もちろん、最新バージョンの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.jsinaction」という本からマルチルームチャットアプリケーションを構築しようとしたときに、同じエラーが発生しました

<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の動作」という本の例を確認しました。もちろん、最新バージョンの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);

ご挨拶!

thnx @CheckMater

thnx @CheckMater

thnx @CheckMater

thnx @CheckMater

thnx @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で

thnx @CheckMater

thnx @CheckMater

thx @CheckMater

ありがとう@CheckMater

このページは役に立ちましたか?
0 / 5 - 0 評価