【问题标题】:Can't get Sails Socket to work无法让 Sails Socket 工作
【发布时间】:2016-12-24 23:16:05
【问题描述】:

搞清楚风帆插座的工作原理已经几天了,但我没有运气让它在我的风帆项目上工作。

所以我有一个称为事件的模型。

在客户端 Javascript 中

  var socket = io.socket;
  socket.on('connect',function socketConnected(){
    console.log("connected");
    socket.get('/events/getData',function getEvents(events){
      addEvents(events);
    });
    socket.on('events',function eventFound(eventData){
      console.log('something happend');
      addEvents(eventData);
    });
  });

在服务器端事件控制器上。

'create': function(req,res){
    var eventsData = u.getParams(req);
    Events.create(eventsData,function created(err,createdEvent){
      Events.publishCreate(createdEvent);
      console.log("created");
      return res.send(200);
    });
  },
  'getData': function(req, res) {
    Events.find().exec(function foundEvent(err, event) {
      if (err) return next(err);

      Events.subscribe(req.socket, event);

      res.send(event);
    });

所以我期望的是,当我将一个事件对象发布到http://localhost:1337/events/create 时,

"socket.on('events',function eventFound(eventData){" 

应该触发吧?我只是无法触发它:(我在这方面做错了什么吗?因为我确定我以某种方式误解了这个套接字概念。

【问题讨论】:

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


    【解决方案1】:

    所以最终我得到了我想要的,那就是添加

    Events.watch(req) 
    

    在getData函数中,添加

    sails.sockets.blast(createdEvent);
    

    紧接着

    Events.publishCreate(createdEvent);
    

    在创建函数中。

    【讨论】:

      【解决方案2】:

      .subscribe() 订阅某些模型实例的更新/删除。因此,如果对这些特定模型实例进行任何更改,将通知连接的套接字。如果你想观察 new 模型实例,你应该改用.watch()。所以不是

      Events.subscribe(req.socket, event);
      

      你应该写

      Events.watch(req.socket);
      

      此外,语法取决于 Sails.js 版本,因为在 v0.12 中对套接字进行了一些更改。如果您使用的是 v0.12 或更高版本(您可以使用sails -v 从命令行检查),正确的语法应该是

      Events.watch(req);
      

      以下是相关文档的链接:

      .subscribe():http://sailsjs.org/documentation/reference/web-sockets/resourceful-pub-sub/subscribe

      .watch():http://sailsjs.org/documentation/reference/web-sockets/resourceful-pub-sub/watch

      【讨论】:

      • 是的,我确实尝试过 .watch() 仍然相同,但最终在创建控制器上我添加了sails.sockets.blast(createdEvent);这个可以按我的需要工作:D 无论如何感谢您的回复和解释
      猜你喜欢
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2014-12-26
      • 2017-12-22
      相关资源
      最近更新 更多