Sailsjs在socket.io中定制onConnect期间的会话访问

时间:2014-03-30 12:55:42

标签: session sails.js socket.io

我正在尝试将所有socket.io连接分组。 我想为每个sails.js会话创建一个组。 我的第一个目标是同时验证所有标签。

所以我尝试使用onConnect中的config/sockets.js来执行此操作:

onConnect: function(session, socket) {
  // By default: do nothing
  // This is a good place to subscribe a new socket to a room, inform other users that
  // someone new has come online, or any other custom socket.io logic
  if (typeof session.socket == 'undefined'){
    session.socket = [];
  }
  session.socket.push(socket.id);
  session.save();

  console.log(session, socket);
},

// This custom onDisconnect function will be run each time a socket disconnects
onDisconnect: function(session, socket) {

  // By default: do nothing
  // This is a good place to broadcast a disconnect message, or any other custom socket.io logic
  if(Array.isArray(session.socket)){
    var i = session.socket.indexOf(socket.id);
    if(i != -1) {
      session.socket.splice(i, 1);
      session.save();
    }
  }
  console.log(session, socket);
},

但我意识到会话不会保存我的修改。 我尝试了session.save,但sailsjs不知道req

Session.set(sessionKey, req.session, function (err) {

我想访问sails.js sesion,但我不知道该怎么做。

我试图搜索一个解决方案,但现在,经过6个小时的搜索,我觉得是时候需要一些帮助了!

谢谢,对不起我的英语不好(我是法国人)。

1 个答案:

答案 0 :(得分:1)

Sails v0.9.x中onConnectonDisconnect的实施似乎存在错误。您现在可以通过在这些方法中调用session.save之前添加以下行来解决此问题:

global.req = {}; global.req.session = session;

然后将session.save()更改为:

session.save(function(){delete global.req;});

这将提供缺少的req var作为全局变量,然后在保存会话后删除全局(安全性)。

请注意,此问题仅影响onConnectonDisconnect方法中的会话;控制器代码session.save内部应该可以正常工作。

感谢您指出这一点!