gpt4 book ai didi

javascript - Sails.js IO.socket 未触发

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:18 25 4
gpt4 key购买 nike

我有一个 AngularJS 应用程序,我试图在数据库中创建/删除项目时触发套接字。我使用自定义 Controller 方法('socketCreate')从使用 $resource 切换到 io.socket.post(),但不确定为什么我的套接字回调都没有触发。

Sails JS 控制台记录新用户,创建新用户,Angular 从套接字获取数据并刷新列表。这一切都正常工作,但是 io.socket.on 回调不会触发。

我的 eventIdentity 是否正确?

Angular Controller :

$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 );
});
}

sails Controller :

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 );
}

}
}

最佳答案

事件回调未触发的原因是您需要订阅 Sails 自动生成的房间。实现此目的的一种方法是使用 Sails 蓝图。因此,如果您将其添加到 Angular Controller 中,您应该会看到事件触发:

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

通过发出此 get 套接字请求,您将执行蓝图:查找操作,该操作会自动将套接字订阅到房间。或者,您可以创建另一个使用 .watch() 方法执行相同操作的操作:

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

return res.ok();
},

然后从 Controller 调用它:

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

关于javascript - Sails.js IO.socket 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com