なぜそれが起こるのですか、どうすれば修正できますか? 助けてください〜
どこからエラー:
... \ socket.io-adapter \ index.js:195
if(fn)process.nextTick(fn.bind(null、null、sids));
socket.ioバージョン:
1.4.5
「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
最も参考になるコメント
「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);
ご挨拶!