Sails.js IO.socket不发射

我有一个AngularJS应用程序,我试图让套接字触发创build/删除我的数据库中的项目。 我从$资源切换到io.socket.post()使用自定义控制器方法('socketCreate'),但不知道为什么我的套接字callback没有触发。

Sails JS控制台logging新用户,创build新用户,angular度从套接字获取数据并刷新列表。 这一切正常工作,但是io.socket.oncallback不会触发。

我没有得到事件的正确性?

angular度控制器:

$scope.newUser = function() { io.socket.post('/users/socketCreate', {name: $scope.temp_user.name}, function( data, jwres ) { $scope.refreshUsers(); $scope.temp_user = {}; }); }; if( !io.socket.newUserListen ) { io.socket.newUserListen = true; console.log( io.socket.newUserListen ); io.socket.on( 'users', function onServerSentEvent( msg ) { console.log( 'users', msg ); }); io.socket.on( 'user', function onServerSentEvent( msg ) { console.log( 'user', msg ); }); } 

风帆控制器:

 module.exports = { socketCreate: function( req, res ) { var newName = req.param( 'name' ); if( newName && req.isSocket ) { Users.create({ name: newName }).exec(function created( err, newGuy ){ Users.publishCreate({ id:newGuy.id, name: newGuy.name }); console.log( 'User Created...' ); res.ok( newGuy ); }) } else if( req.isSocket ) { Users.watch( req ); } else { console.log( newName, req.isSocket ); } } } 

事件callback不会触发的原因是您需要订阅由Sails自动生成的房间。 一种方法是使用Sails蓝图。 所以如果你把这个添加到你的Angular控制器中,你应该看到事件发生:

  io.socket.get('/users', function(data) {}); 

通过使这个获取套接字请求,你正在执行的蓝图:find行动自动订阅到房间的套接字。 或者,您可以创build另一个使用.watch()方法执行相同操作的操作:

 join: function(req, res) { Users.watch(req); return res.ok(); }, 

然后从控制器中调用它:

 io.socket.put('/users/join', function(data) {});