Реализация апострофа cms с помощью socket.io - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь реализовать Socket.io на Apostrophe cms 2.x

Я не знаю, как получить объект сервера из экспресс-апос

Если я сделаю следующее, мне нужно будет создать новый сервер на новом порту, и мне понадобится сокет на тех же портах, что и в экспресс-приложении

Библиотека / модули / апостроф-розетка / index.js

module.exports = {
  construct: function(self, options) {
    var server = require('http').Server(self.apos.app);
    var io = require('socket.io')(server);

    io.of('/api/v1/io/notifications').on('connection', function (socket) {
      console.log("New connection", socket.id);
      socket.on('notification', function (data) {
        console.log("this is a notification ",data);
      });
    });

  }
};

1 Ответ

0 голосов
/ 04 сентября 2018

Взгляните на модуль апостроф-экспресс, который устанавливает приложение экспресс. Объект сервера доступен как apos.modules ['апостроф-экспресс']. Сервер. Это устанавливается довольно поздно в процессе запуска, потому что, как только он там, соединения могут начать входить. Один хороший момент для доступа к нему - обратный вызов afterListen: function (err) {...} прямо в app.js. Обратите внимание, что если присутствует ошибка, он не прослушивается успешно, и поскольку вы предоставили функцию afterListen, вы несете ответственность за выход.

Таким образом, ваш код может выглядеть так:

// in app.js
afterListen: function(err) {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  var io = require('socket.io')(apos.modules['apostrophe-express'].server);
}

Проблематично, что мы не генерируем событие обещания для afterListen, поэтому вы застряли, делая это с обратным вызовом в app.js вместо добавления прослушивателя событий в вашем собственном модуле, который структурировал бы ваш код лучше. Однако вы можете вызвать метод в одном из ваших собственных модулей из afterListen. На этом этапе инициализации мы рассмотрим добавление события обещания.

...