لماذا يحدث وكيف يمكنني إصلاحه؟ الرجاء المساعدة ~
يخطئ من حيث:
... \ socket.io-adaptor \ index.js: 195
if (fn) process.nextTick (fn.bind (null، null، sids)) ؛
إصدار socket.io:
1.4.5
لقد حصلت على نفس الخطأ أثناء محاولتي إنشاء تطبيق الدردشة متعدد الغرف من كتاب "Node.js in action"
<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"
}
راجع للشغل ، قبل التعليق هنا ، قرأت صفحة الترحيل من 0.9 من موقع socket.io لكنني لم أجد حلاً.
يمكنني تحميل مشروع الدردشة البسيط في مكان ما إذا لزم الأمر (إنه صغير جدًا).
لقد راجعت المثال في كتاب NodeJs قيد التشغيل ، وبالطبع لن يعمل إذا كنت تستخدم أحدث إصدارات socket.io ، سيكون لديك السطران التاليان لجعله يعمل:
من:
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);
تحيات!
تضمين التغريدة
تضمين التغريدة
تضمين التغريدة
تضمين التغريدة
تضمين التغريدة
شكرا يا رجل تشيك ماتر
شكرا 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
تضمين التغريدة
تضمين التغريدة
تضمين التغريدة
شكرا CheckMater
التعليق الأكثر فائدة
لقد راجعت المثال في كتاب NodeJs قيد التشغيل ، وبالطبع لن يعمل إذا كنت تستخدم أحدث إصدارات socket.io ، سيكون لديك السطران التاليان لجعله يعمل:
من:
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);
تحيات!