每当创建(或删除/修改)模型时,每个连接的套接字都会通过Sails自动套接设置得到通知。这在某种程度上很好,但我想在某些时候过滤这些通知。
我的应用程序有自己的“通知”,应发送给各自的接收方。所以他们的解剖结构有点像:id, message, receiver, sender
。
身份验证是本地护照实施。
收听notification
个事件会导致每次创建通知时都会收到通知。
// client: app.js
io.socket.on('notification', function(evt) { console.log(evt); });
我现在尝试实现的是过滤这些通知以匹配用户ID。我写了一个适用于/notification
事件的政策。
// Policy: forUser
module.exports = function(req, res, next) {
// ... whatever ... //
return next();
}
在政策中
'notification': {
'create': ['passport', 'forUser']
}
我现在的问题是:如何实施这项政策?我想只检查notification.receiver == req.user.id
,但是如何在策略中获取通知模型(如果这是正确的方法)?
感谢。
编辑:尝试实施会议室解决方案,但我没有在客户端收到任何通知。
我在NotificationController中更改了我的订阅功能:
subscribe: function(req, res) {
sails.log.info('Your user id: ' + req.user.id);
sails.sockets.join(req.socket, 'user_notifications_' + req.user.id);
res.json({
room: 'user_notifications_' + req.user.id
});
},
并在我的模型中添加了afterCreate
方法:
afterCreate: function(model, next) {
sails.sockets.broadcast('user_notifications_' + model.receiver, { test: 'hello' });
next();
}
客户端代码现在是:
io.socket.get("/notification/subscribe", function(data, jwr) {
io.socket.on(data.room, function(obj) {
console.log(obj);
});
});
调用订阅方法并返回正确的房间名称。但是在致电/notification/create?message=test&receiver=1
时我没有收到任何消息。调用afterCreate
方法,所有用户ID都是正确的(因为只有一个用户),但没有任何反应。
EDIT2: 似乎加入房间失败了。
sails.sockets.join(req.socket, 'testroom');
// For testing
sails.log.debug(sails.sockets.socketRooms(req.socket));
会创建房间,但套接字未订阅。
EDIT3: 找到解决方案。一旦界面完成,我就会发布GitHub链接。