2016-08-18 55 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