羽毛 - 通过 Socket.io 发出自定义事件

Feathers - Emit Custom Event via Socket.io

我正在尝试在 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('groups').find()

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

然而,使用 Socket.io 永远不会发出事件。在频道中,我将每个事件发送给经过身份验证的用户。我也尝试将其更改为每个人都没有成功。正如我 运行 Feathers 使用 DEBUG=* npm start 我可以看到,该事件永远不会发出。任何的想法?谢谢!

目前这还是有点挑剔。问题是调用 app.use 时,events 数组需要在服务上。可以这样做:

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);
};

那你就可以用了as documented:

groupsService.emit('list', groups)

Feathers 数据库服务已经采用 events option,因此它看起来像这样:

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);
};