2016-08-18 5 views
0

Прошло несколько дней, выяснив работу сокетов, но мне не повезло, что он работает над моим проектом парусов.Не удается получить Sails Socket для работы

У меня есть модель под названием События.

В стороне клиента 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); 
    }); 

Так что я ожидал, что когда я POST объекта события для 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

Смежные вопросы