2014-11-09 3 views
0

Я пытаюсь перестроить код socket.io от 0.9v до 1.x. Экспресс и socket.io являются последними версиями.TypeError: Не удается вызвать метод «get» undefined at socket.handshake

Итак, ошибка: Cannot call method 'get' of undefined в

io.on('connection', function(socket) { 
      console.log(socket.handshake); 
      var username = socket.handshake.user.get('username'); //<----here 

      ...... 

Это мой код:

module.exports = function(server) { 
       var io = require('socket.io')(server); 
       io.set('origins', 'localhost:*'); 
      //I changed set to use, but it's doesn't matter i think 
       io.use(function(socket, next) { 
        var handshake = socket.request; 
       //io.set('authorization', function(handshake, callback) { 
        async.waterfall([ 
         function(callback) { 
         handshake.cookies = cookie.parse(handshake.headers.cookie || ''); 

    var sidCookie = handshake.cookies[config.get('session:key')]; 
     var sid = connect.utils.parseSignedCookie(sidCookie, config.get('session:secret')); 
     //var sid = cookieParser.signedCookie(sidCookie, config.get('session:secret')); 

          loadSession(sid, callback); 
         }, ...continue... 

продолжение:

function(session, callback) { 

          if (!session) { 
           callback(new HttpError(401, "No session")); 
          } 

          handshake.session = session; 
          loadUser(session, callback); 
         }, 
         function(user, callback) { 
          if (!user) { 
           callback(new HttpError(403, "Anonymous session may not connect")); 
          } 

          handshake.user = user; 
          callback(null); 
         } 

        ], function(err) {.....}); 
       next(); 
       }); 

     io.on('connection', function(socket) { ... }; 

возврата ИО; };

Хорошо, помогите мне пожалуйста и спасибо!

ответ

0

Как бы я отлаживал это. Невозможно назвать метод по какой-либо неопределенной

Таким образом, мы знаем, что все, что вы звоните .get еще не создано. В этом случае:

var username = socket.handshake.user.get('username'); //<----here 

Так что первое, что я хотел бы сделать, если вы не имеете доступа к язя отладчик

console.log (розетки)

если есть данные

console.log (socket.handshake);

Если есть данные

console.log (socket.handshake.user);

Если у этого есть данные, проверьте, что у него есть метод GET.

В любом случае, Мое предположение, что socket.handshake.user еще не определен. Где код, который устанавливает это/раскрывает его?

+0

ОК. Я проверил в консольном отладчике «socket.handshake» - он имеет некоторые данные, но socket.handshake.user ничего не имеет (нет ошибки, только новая строка). И socket.handshake.user.get - Невозможно прочитать свойство «get» неопределенного. –

+0

Где код, который устанавливает это/раскрывает его? - в функции (пользователь, обратный вызов) {handshake.user = пользователь; обратный вызов (нуль); } ' –

+0

Хорошо. В 'function (user, callback) {...}' после 'handshake.user = user' у нас есть' handshake.user.username = "correct username" '. И теперь мне нужно правильно установить 'var username' в' io.on ('connection', function (socket) {' Помогите мне! –

Смежные вопросы