在政策

时间:2015-08-24 15:41:03

标签: javascript node.js sockets sails.js

每当创建(或删除/修改)模型时,每个连接的套接字都会通过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链接。

0 个答案:

没有答案