我想确保只有发送注册/"用户创建"消息的套接字才能获得相应的"用户创建"响应。文档中有一个简单的示例,如下所示:
// Publish the `created` event to admins and the user that sent it
app.service('users').publish('created', (data, context) => {
return [
app.channel('admins'),
app.channel(app.channels).filter(connection =>
connection.user._id === context.params.user._id
)
];
});
但是这对我不起作用。如果我记录 context.params 对象,这在注册新用户时看起来就像这样:
{ query: {},
route: {},
connection: { provider: 'socketio' },
provider: 'socketio' }
因此,相应的连接不会获取事件。我在这里错过了什么吗?我是否必须在注册过程中添加一些内容才能正常工作?多谢!
最简单的解决方案是根本不担心将实时事件调度给该用户。如果同一连接已经在调用.create
则该承诺的结果(.create(data).then(userData => {})
(将与调度的事件相同。
如果您仍希望新创建的用户加入某些频道,您可以在 after 挂钩中使用params.connection
,如本期所示:
app.service('users').hooks({
after: {
create(context) {
const { params: { connection }, result } = context;
if(connection) {
context.app.channel(`user/${result.id}`).join(connection);
}
return context;
}
}
});