Node.js Feathers-通过Socket.io发出自定义事件
我正在尝试在Feathers挂钩中发出自定义事件。我在钩子里试了以下方法: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
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);
};
谢谢我还通过您的一个代码示例发现了这个问题,它帮助了我:对于每个有相同问题的人,我实现了一个自定义事件,如本文中所述: