我正在尝试与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
为什么我无法在快捷路线中访问套接字连接中保存的数据?
答案 0 :(得分:0)
我认为当您从套接字io设置会话中的值时,您会缺少.save()方法- socket.handshake.session.data = ['连接']; socket.handshake.session.save();
这应该可行。