我正在尝试遵循此处的指南:
http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/
我正在将 Node、Express 和 socket.io 与 AngularJS 结合使用。
当我加载http://localhost:8000/donate
时,我在客户端收到以下错误:
Uncaught TypeError: Cannot call method 'onClose' of null [VM] socket.io.min.js (2806):2
(anonymous function)
相同的 angular.factory 模式:
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);
}
});
})
}
};
}]);
Node 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);
};
最后是我使用它的 Angular Controller :
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);
});
}]);
最佳答案
所以问题是我仍然在 Node 的app.js中使用app.listen(port)
我需要将其更改为server.listen(port,callback)
并且一切都开始工作:)
关于node.js - socket.io Angular 错误: Uncaught TypeError: Cannot call method 'onClose' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422581/