Javascript 如何在Express v4和Socket.io 1.3.2之间共享会话

Javascript 如何在Express v4和Socket.io 1.3.2之间共享会话,javascript,node.js,express,socket.io,socket.io-1.0,Javascript,Node.js,Express,Socket.io,Socket.io 1.0,在过去的几天里,我一直在尝试分享一个从socket.io使用的快速会话,但我实在无法理解它。我正在将express 4.11.1与socket.io 1.3.2一起使用。其他依赖项包括express session 1.10.1、cookie parser 1.3.3和body parser 1.10.2。我基本上是将客户机数据从express放入会话,并希望在socket.io中使用该信息,因为sockets在重新连接时会丢失信息。我所做的基本上就是我所做的,但这对我来说根本不起作用 var

在过去的几天里,我一直在尝试分享一个从socket.io使用的快速会话,但我实在无法理解它。我正在将express 4.11.1与socket.io 1.3.2一起使用。其他依赖项包括express session 1.10.1、cookie parser 1.3.3和body parser 1.10.2。我基本上是将客户机数据从express放入会话,并希望在socket.io中使用该信息,因为sockets在重新连接时会丢失信息。我所做的基本上就是我所做的,但这对我来说根本不起作用

var express = require('express'),
    app = express(),
    session = require('express-session'),
    cookieParser = require('cookie-parser'),
    sessionStore = new session.MemoryStore(),
    bodyParser = require('body-parser');
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;

var sessionMiddleware = session({
  name: 'sid',
  store: sessionStore, // MemoryStore
  secret: 's3cr37',
  saveUninitialized: true,
  resave: true,
});

io.use(function(socket, next) {
  sessionMiddleware(socket.request, socket.request.res, next);
});

app.use(sessionMiddleware);
app.use(bodyParser.json())

server.listen(port, function() {
  console.log('Server listening at port %d', port);
});

app.post('/login', function(req, res){  
  //just storing the info in session
  req.session.username = req.body.user;
  ...
});

io.on('connection', function(socket) {
  //using socket.request.session.username which doesn't work
  ...
});

非常感谢您提供的任何帮助

因此,经过大量的处理,我找到了如何从socket中的会话中获取值的方法。而不是像这样访问会话的值:

socket.request.session.username
我需要这样做:

var getUsernameFromSession = function(socket) {
  var sessionId = socket.request.sessionID;
  var cookie = JSON.parse(socket.request.sessionStore.sessions[sessionId]);
  return cookie.username;
};
我不确定这有多好,但这对我很有效