Sails.JS 的发布方法在控制器中不起作用,但在控制台中起作用

Sails.JS's publish method doesn't work in a controller, but works in the console

目前,我正在探索 Web 开发以了解所有炒作的内容。除了在JavaScript接受过小的'create your first CRUD app in Node.JS'和一些正规的培训外,我没有任何经验。

我是 JavaScript、NodeJS、Sails.JS 和 WebSockets 的新手。

我目前的问题是:

我正在尝试开发的应用程序收到 POST 个带有 JSON 对象的调用。这是应用程序的输入部分。这些 POST 调用来自任何随机主机。

输出是一个网页,该网页通过侦听名为 sails.io.js 的 Sails.JS 供电的 WebSocket 系统进行自我更新。

基本上,来自任何主机的每个 POST 都应该在 WebSocket 上产生一个事件。

由于我不是在构建正式的 REST API,因此我必须自己在 Sails.JS 中定义一些部分。我确实启用了蓝图。

首先,在处理 POST 调用的控制器中,我可以调用下面的代码,以便现有的 WebSockets 可以接收正在创建的新 ServiceHeartBeatSession 的事件。这里提到的所有服务器端代码都位于控制器中或在控制台中执行。

sails.sockets.addRoomMembersToRooms(ServiceHeartBeatSession._classRoom()
 , ServiceHeartBeatSession._room(session.id) );

然后,执行invoke方法将这个事件发送给所有监听的WebSockets。

ServiceHeartBeatSession.publish([ session.id ], { "verb": "created" });

但是,.publish 方法不会导致现有 WebSocket 发生事件。除非我自己在控制台中执行它。 WebSocket 是这样注册的:

io.socket.on('serviceheartbeatsession', function(resData) {
    alert('Something changed!!!!');
  });

我深入研究了源代码并尝试自己调试它。以下是我目前的发现:

有人有什么想法吗?

sails.sockets.addRoomMembersToRooms(ServiceHeartBeatSession._classRoom()
           , ServiceHeartBeatSession._room(session.id), () => {
    ServiceHeartBeatSession.publish([ session.id ], { "verb": "created" });
});

文档说它有一个回调。错过了,呵呵。