Node.js Can';t在express和socket.io之间共享套接字会话

Node.js Can';t在express和socket.io之间共享套接字会话,node.js,sockets,session,express,Node.js,Sockets,Session,Express,我正在尝试与socket.io会话共享express会话,但无法从express routes访问保存的会话变量。我正在使用共享会话。当我保存套接字“连接”事件的数据,然后触发路由更改时,express似乎不知道更改的会话数据 const path = require('path'); const app = require('express')(); const server = require('http').Server(app); const io = require('socket.

我正在尝试与socket.io会话共享express会话,但无法从express routes访问保存的会话变量。我正在使用共享会话。当我保存套接字“连接”事件的数据,然后触发路由更改时,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);
我花了很多时间使用不同的配置选项进行故障排除,但没有成功。我通过在回购协议中创建一个极其简单的示例来证明问题的最佳方式:


为什么我不能从我的快速路由中的套接字连接访问保存的数据?

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


这可能会起作用。

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

这可能会奏效