2016-08-18 56 views
0

这几天搞清楚风帆插座的工作,但我没有运气让它在我的风帆项目上工作。找不到风帆插座工作

所以我有一个叫做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); 
    }); 
    }); 

而且对服务器端事件的控制器。

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

应该已经触发了吧?我只是不能让它触发:(有什么我做错了这个呢?因为我敢肯定,我有点误解了此套接字的概念。

回答

0

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

Events.watch(req) 

中的getData功能,并添加

sails.sockets.blast(createdEvent); 

Events.publishCreate(createdEvent); 
在创建功能

权。

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

+0

是的我用.watch()仍然尝试过,但最终在创建控制器上我添加了sails.sockets.blast(createdEvent);而且这个工作正如我所需要的那样:D谢谢你的回应和解释 – campin