Socket.io: ألقى Socket.io خطأ: fn.bind ليس وظيفة

تم إنشاؤها على ٤ فبراير ٢٠١٦  ·  18تعليقات  ·  مصدر: socketio/socket.io

لماذا يحدث وكيف يمكنني إصلاحه؟ الرجاء المساعدة ~

يخطئ من حيث:
... \ socket.io-adaptor \ index.js: 195
if (fn) process.nextTick (fn.bind (null، null، sids)) ؛

إصدار socket.io:
1.4.5

التعليق الأكثر فائدة

لقد راجعت المثال في كتاب 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);

تحيات!

ال 18 كومينتر

لقد حصلت على نفس الخطأ أثناء محاولتي إنشاء تطبيق الدردشة متعدد الغرف من كتاب "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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات