羽毛 - 通过 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);
};
我正在尝试在 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);
};