Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Feathers-通过Socket.io发出自定义事件_Node.js_Socket.io_Feathersjs - Fatal编程技术网

Node.js Feathers-通过Socket.io发出自定义事件

Node.js Feathers-通过Socket.io发出自定义事件,node.js,socket.io,feathersjs,Node.js,Socket.io,Feathersjs,我正在尝试在Feathers挂钩中发出自定义事件。我在钩子里试了以下方法: module.exports = function (options = {}) { return async context => { const { app } = context; const groupsService = app.service('groups'); const groups = await groupsService.find( { query:{ mem

我正在尝试在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);
};
问题是,事件永远不会发出。通过调试,我在控制台中只看到以下消息:

调试:在app.service('groups').find()之前

调试:在app.service('groups').find()之后

===============================发射====================


但是,事件从不使用Socket.io发出。在通道中,我将每个事件发送给经过身份验证的用户。我也试着把它改成每个人都可以,但没有成功。当我使用
DEBUG=*npm start
运行Feather时,我可以看到事件从未发出。有什么想法吗?谢谢

目前这还是有点挑剔。问题在于,调用
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);
};
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);
};
然后您可以使用它:

Feathers数据库服务已经采取了以下措施:

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

谢谢我还通过您的一个代码示例发现了这个问题,它帮助了我:对于每个有相同问题的人,我实现了一个自定义事件,如本文中所述: