Я пытаюсь следовать руководству здесь: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);
});
}]);
возможно дубликат [неперехваченным TypeError: не могу назвать метод 'onClose' of null] (http://stackoverflow.com/questions/15295672/uncaught-typeerror-cannot-call-method-onclose-of-null) –