无法在express和socket.io之间共享套接字会话

时间:2017-03-30 02:40:55

标签: node.js sockets session express

我正在尝试与socket.io会话共享快速会话,但我无法从快速路由访问已保存的会话变量。我正在使用express-socket.io-session来分享会话。当我在套接字的“连接”事件中保存数据,然后触发路由更改时,express似乎不知道更改的会话数据。

const path = require('path');

const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const session = require('express-session')({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
});
var sharedsession = require('express-socket.io-session');

app.use(session);

io.use(sharedsession(session, {
    autoSave: true
}))

io.on('connection', (socket) => {

    socket.handshake.session.data = ['connection']
    console.log(socket.handshake.session);

    // First
    socket.on('login', data => {
        socket.handshake.session.data.push('login');
        console.log(socket.handshake.session);
    });
})

// Second
app.get('/route', (req, res, next) => {
    console.log(req.session.data); // => undefined
})

app.get('/*', (req, res, next) => {
    res.sendFile(path.join(__dirname, 'index.html'));
})

server.listen(3000);

我花了很多时间使用不同的配置选项进行故障排除但没有成功。通过在回购中创建极小的示例来演示问题的最佳方式: https://github.com/matt-mcdaniel/express-socket-test

为什么我无法在快捷路线中访问套接字连接中保存的数据?

1 个答案:

答案 0 :(得分:0)

我认为当您从套接字io设置会话中的值时,您会缺少.save()方法- socket.handshake.session.data = ['连接']; socket.handshake.session.save();

这应该可行。