【发布时间】:2017-08-23 18:30:05
【问题描述】:
我正在尝试与 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);
我花了很多时间对不同的配置选项进行故障排除,但没有成功。我通过在 repo 中创建一个极小示例来演示问题的最佳方法: https://github.com/matt-mcdaniel/express-socket-test
为什么我无法从我的快速路由中的套接字连接访问保存的数据?
【问题讨论】:
标签: node.js sockets session express