Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Sails.js v0.11中触发自定义套接字事件?_Javascript_Angularjs_Node.js_Sockets_Sails.js - Fatal编程技术网

Javascript 如何在Sails.js v0.11中触发自定义套接字事件?

Javascript 如何在Sails.js v0.11中触发自定义套接字事件?,javascript,angularjs,node.js,sockets,sails.js,Javascript,Angularjs,Node.js,Sockets,Sails.js,Sails.js和sockets有问题。在大多数情况下,它们工作得很好。我能够在客户端订阅套接字(Sails Socket client和AngularJS),并在使用Blueprint更新记录时从服务器接收消息。但是,当我尝试使用更自定义的方法时,我无法触发套接字事件。我可以通过订阅以下内容来隔离客户 // Listen for game model event io.socket.on('game', function(e) { console.log('Game Socket Ev

Sails.js和sockets有问题。在大多数情况下,它们工作得很好。我能够在客户端订阅套接字(Sails Socket client和AngularJS),并在使用Blueprint更新记录时从服务器接收消息。但是,当我尝试使用更自定义的方法时,我无法触发套接字事件。我可以通过订阅以下内容来隔离客户

// Listen for game model event
io.socket.on('game', function(e) {
    console.log('Game Socket Event');
});

// Subscribe to model record
io.socket.get('/game/' + gameId);
同样,这对订阅很有效,但是对于一些更复杂的任务,我必须针对控制器操作。这些通常包括大量的记录查找,可能是对服务的调用,最后是写入记录(或更多)。在链的末尾,当所有问题都得到解决时,我希望只向特定的客户机发出套接字消息。我想我可以用一些东西,比如

Game.findOne({ id: data.gameId }).exec(function(err, gameData) {
    // Subscribe to the record
    Game.subscribe(req.socket, gameData, ['create', 'update', 'destroy']);
    // Various calls and updates to game model and others
    Game.publishUpdate(gameData.id);
}
publishUpdate()调用中的游戏ID与订阅中的相同,控制器操作的端点是“/game/deal”,因此我想我的问题是是否需要使用套接字调用再次订阅此URL?我正在改变游戏记录,所以我本以为它会触发套接字事件,但事实并非如此

任何指点都是最受欢迎的。我使用的是v0.10.5,但升级到了v0.11,我也有同样的问题。。。所以我想在某个地方是我

我还要补充一点,现在autoWatch设置为on,Blueprint mirror选项也是如此。然而,我更愿意放弃自动观察,只选择应该实际发出哪些事件


谢谢。

如果我没有看错您的问题,那么问题在于您使用的是HTTP请求,而不是套接字请求来访问
/game/deal
端点。如果是这样的话,
Game.subscribe
调用将不起任何作用,因为服务器没有要订阅的套接字!如果你看看你的码头,你可能会看到船帆在抱怨:

`Model.subscribe()` called by a non-socket request.
你问:

我是否需要通过套接字调用再次订阅此URL

为什么不第一次就通过插座来点击呢

io.socket.get("/game/deal/123")

或者
io.socket.post
io.socket.put
,等等。控制器操作中的所有逻辑都将按预期执行,额外的好处是
req.socket
是一个可以订阅的真正套接字。

是的,我在那一个上有一个http调用,而不是套接字调用,我的坏,将其调整到套接字请求,所有功能均按预期工作,始终有一个未完成。:)