【问题标题】:Sails.js sails.io.js, blueprints not getting events from .publish(), how to subscribe to all events?Sails.js Sails.io.js,蓝图未从 .publish() 获取事件,如何订阅所有事件?
【发布时间】:2021-11-21 06:46:59
【问题描述】:

我不知道为什么我没有收到来自 model.publish() 的风帆模型的通知事件。 在 1.x 之前的sailsjs 中,类似的客户端代码已经工作了,当记录被创建、更新或删除时,我会得到每个事件。所以,我一定是误会了什么。

如何订阅来自 CRUD 操作的任何记录的所有事件?

在服务器端,我有 Job.js 和 JobController.js。

在 Job.js 模型中,这个测试只是每 10 秒创建一个新记录:

test: async function(dataset) {
    let count = 0;
    setInterval(async function() {
        count++;
        let newjob = {
            dataset: dataset,
            state: 'delayed',
            name: "job name "+count
        };
        
        let job = await Job.create(newjob).fetch()
        sails.log.info('created test job: ',JSON.stringify(job));
        Job.publish([job.id],job);

    },10000);

}

在 JobController.js 中,由客户端调用并开始测试滚动:

submittest: async function(req,res) {

    let dataset = await Dataset.Get({});
    await Job.test(dataset[0].id);

    return res.ok({status:'ok'});
}

在客户端test.html中,io.socket.get操作成功,但是我从来没有看到一个事件:

...
<script>
io.socket.get('/job', function(body, JWR) {

  console.log('and with status code: ', JWR.statusCode);

  setTimeout(function() {
    io.socket.get('/job/submittest', function (body,JWR) {

      io.socket.on('job', function(msg) {
        console.log("job event",msg);  // not getting here.  why?
      });

    });
  },2000)

});
</script>

这一切都运行良好,但问题是,从客户端看不到任何事件。为什么?我没有订阅初始 io.socket.get('/job') 的事件吗?

【问题讨论】:

    标签: socket.io sails.js sails.io.js


    【解决方案1】:

    基本上,这里发生的事情是,你在一个空盒子里大喊你模型中的新记录,但没有人在那个空盒子里听你说话。

    换句话说,您需要订阅模型更新的套接字连接。

    见:https://sailsjs.com/documentation/reference/web-sockets/resourceful-pub-sub/subscribe

    另外,请查看this question 的答案以快速了解操作方法。

    【讨论】:

      猜你喜欢
      • 2023-02-19
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多