Feathers - Создать пользовательское событие через Socket.io - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь создать пользовательское событие в хуке Feathers.В хуке я попробовал следующее:

module.exports = function (options = {}) {
  return async context => {

    const { app } = context;

    const groupsService = app.service('groups');
    const groups = await groupsService.find( { query:{ members: context.result.user._id } });

    await app.emit('list', groups); // Try 1
    await groupsService.emit('list', groups); // Try 2
    await context.service.emit('list', groups); // Try3
    console.log('====================EMIT====================');

    return context;
  };
};

Я также добавил событие в сервис:

module.exports = function (app) {
  this.events = ['list']; // Try 1
  (...)
  // Get our initialized service so that we can register hooks
  const service = app.service('groups');

  service.events = ['list']; // Try 2

  service.hooks(hooks);
};

Проблема в том, что событие никогда не генерируется.При отладке я вижу только следующие сообщения в консоли:

debug: before app.service ('groups'). Find ()

debug: after app.service ('группы '). find ()

==================== EMIT ====================

Однако событие никогда не генерируется с помощью Socket.io.В каналах я отправляю каждое событие аутентифицированным пользователям.Я также попытался изменить это всем без успеха.Когда я запускаю Feathers, используя DEBUG=* npm start, я вижу, что событие никогда не генерируется.Любая идея?Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Это все еще немного привередливо в данный момент.Проблема заключается в том, что массив events должен быть включен в службу при вызове app.use.Это можно сделать следующим образом:

module.exports = function (app) {
  (...)

  app.use('/groups', Object.assign(createService(options), {
    events: [ 'list' ]
  }));

  // Get our initialized service so that we can register hooks
  const service = app.service('groups');

  service.hooks(hooks);
};

Затем вы можете использовать его как описано :

groupsService.emit('list', groups)

Службы базы данных Feathers уже принимают events опция , чтобы она выглядела так:

module.exports = function (app) {
  const options = {
    (...)
    events: [ 'list' ]
  };

  app.use('/groups', createService(options));

  // Get our initialized service so that we can register hooks
  const service = app.service('groups');

  service.hooks(hooks);
};
...