2013-12-06 2 views
2

Я пытаюсь следовать руководству здесь:Socket.io угловой погрешности: Uncaught TypeError: Невозможно вызвать метод «OnClose» нулевых

http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/

Я использую узел, экспресс, и гнездо. io с угловыми.

Я получаю ошибку последующих на стороне клиента, когда я загрузить http://localhost:8000/donate:

Uncaught TypeError: Cannot call method 'onClose' of null [VM] socket.io.min.js (2806):2 
(anonymous function) 

же картина углового завода:

app.factory('socket', [ 
'$rootScope' 
    , '$log' 
    , function (
     $rootScope 
     , $log 
     ) { 

     var socket = io.connect(); 

     $log.log('socket', io, socket); 

     return { 
      on: function (eventName, callback) { 
       socket.on(eventName, function() { 
        var args = arguments; 
        $rootScope.$apply(function() { 
         callback.apply(socket, args); 
        }); 
       }); 
      }, 
      emit: function (eventName, data, callback) { 
       socket.emit(eventName, data, function() { 
        var args = arguments; 
        $rootScope.$apply(function() { 
         if (callback) { 
          callback.apply(socket, args); 
         } 
        }); 
       }) 
      } 
     }; 
}]); 

Узел app.js

var express = require('express') 
    , app = express() 
    , server = require('http').createServer(app) 
    , socket = require('./routes/socket.js') 
    , io = require('socket.io').listen(server); 

... 

//sockets 
io.sockets.on('connection', socket.version); 

и. /routes/socket.js

var socket = module.exports = {} 
    , c = console; 

socket.version = function(sock){ 
    var pkg = require('../package.json'); 

    var version = pkg.version; 

    c.log('socket', sock, version); 

    sock.emit('send:version', { 
     version: version 
    }); 

    setInterval(function() { 
     sock.emit('send:time', { 
      time: (new Date()).toString() 
     }); 
    }, 1000); 
}; 

И, наконец, угловой контроллер я использую его в:

app.controller('DonateCtrl', [ 
    '$scope' 
    , '$rootScope' 
    , 'socket' 
    , '$log' 
    , function(
     $scope 
     , $rootScope 
     , socket 
     , $log 
    ) { 

     socket.on('send:version', function (data) { 
      $log.log('send:version', data); 
      $scope.version = data.version; 
     }); 

     socket.on('send:time', function (data) { 
      $log.log('send:time', data); 
     }); 

     $scope.$watch('version', function(newVal, oldVal){ 
      $log.log('version', newVal, oldVal); 
     }); 

     $scope.$on('socket:error', function (ev, data) { 
      $log.log('socket:error', ev, data); 
     }); 
}]); 
+0

возможно дубликат [неперехваченным TypeError: не могу назвать метод 'onClose' of null] (http://stackoverflow.com/questions/15295672/uncaught-typeerror-cannot-call-method-onclose-of-null) –

ответ

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