我正在尝试在 Feathers Hook 中发出自定义事件。我在钩子(Hook)中尝试了以下操作:
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 发出。在 channel 中,我将每个事件发送给经过身份验证的用户。我也尝试给大家改过,但没有成功。当我使用 DEBUG=* npm start
运行 Feathers 时,我可以看到该事件从未发出。任何想法?谢谢!
最佳答案
目前这仍然有点挑剔。问题在于,调用 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);
};
关于node.js - Feathers - 通过 Socket.io 发出自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50801842/