mengapa itu terjadi dan bagaimana cara memperbaikinya? tolong bantu~
salah dari mana:
...\socket.io-adapter\index.js:195
if (fn) process.nextTick(fn.bind(null, null, sids));
versi socket.io:
1.4.5
Saya mendapatkan kesalahan yang sama ketika mencoba membangun aplikasi obrolan multi-ruangan dari buku "Node.js beraksi"
<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)
Masalah muncul jika Anda memperbarui dependensi ke versi terbaru:
"dependencies": {
"mime": "^1.3.4",
"socket.io": "^1.4.5"
}
saat berfungsi jika Anda menggunakan dependensi yang ditentukan oleh buku
"dependencies": {
"socket.io": "~0.9.6",
"mime": "~1.2.7"
}
BTW, sebelum berkomentar di sini, saya sudah membaca halaman Migrasi dari 0.9 dari situs socket.io tetapi saya belum menemukan solusi.
Saya dapat mengunggah proyek obrolan sederhana di suatu tempat jika diperlukan (sangat kecil).
Saya memeriksa contoh di buku NodeJs in action, dan tentu saja itu tidak akan berfungsi jika Anda menggunakan socket.io versi terbaru, Anda akan memiliki 2 baris berikut untuk membuatnya berfungsi:
Dari:
var usersInRoom = io.sockets.clients(room);
Ke:
var usersInRoom = io.of('/').in(room).clients;
dan dari:
socket.emit('rooms', io.sockets.manager.rooms);
ke:
socket.emit('rooms', io.of('/').adapter.rooms);
Salam pembuka!
terima kasih @CheckMater
terima kasih @CheckMater
terima kasih @CheckMater
terima kasih @CheckMater
terima kasih @CheckMater
Terima kasih pak @CheckMater
terima kasih @CheckMater
terima kasih @CheckMater
terima kasih @CheckMater
terima kasih @CheckMater
Terima kasih @CheckMater . Tetapi bagi saya hanya mengubah var usersInRoom = io.of('/').in(room).clients;
tidak berhasil. Karena klien ini adalah fungsi yang mengambil panggilan balik sebagai param, cuplikan di bawah ini berfungsi untuk saya.
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: kamar tidak ditentukan : di findClientsSocket
terima kasih @CheckMater
terima kasih @CheckMater
thx @CheckMater
terima kasih @CheckMater
Komentar yang paling membantu
Saya memeriksa contoh di buku NodeJs in action, dan tentu saja itu tidak akan berfungsi jika Anda menggunakan socket.io versi terbaru, Anda akan memiliki 2 baris berikut untuk membuatnya berfungsi:
Dari:
var usersInRoom = io.sockets.clients(room);
Ke:
var usersInRoom = io.of('/').in(room).clients;
dan dari:
socket.emit('rooms', io.sockets.manager.rooms);
ke:
socket.emit('rooms', io.of('/').adapter.rooms);
Salam pembuka!