无法让Sails Socket工作

时间:2016-08-18 06:20:25

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

已经有几天时间计算帆的插座工作但我没有运气让它在我的帆船项目上工作。

所以我有一个名为Events的模型。

在客户端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);
    });
  });

在ServerSide事件控制器上。

'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){" 

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

2 个答案:

答案 0 :(得分:0)

.subscribe()订阅某些型号实例的更新/删除。因此,如果对这些特定模型实例进行任何更改,将通知连接的套接字。如果您想要关注模型实例,则应使用.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

答案 1 :(得分:0)

所以最终我得到了我想要的添加

Events.watch(req) 

在getData函数中,并添加

sails.sockets.blast(createdEvent);

之后

Events.publishCreate(createdEvent);

在创建功能。