我有一个基于express、express-session和ws构建的应用程序(用于支持websocket)。
我使用了以下代码来启用session中间件:
app.use(session({secret: 'mysecret',resave: true,saveUninitialized: true,cookie: {}}));
我可以通过以下方式在get处理程序中读取和保存会话变量:
app.get('/', function (req, res) {
res.send('Hello World!');
console.log(req.session.test);
req.session.test="OK";
req.session.save();
});
第一次打印“undefined”,第二次按预期打印“OK”。
现在我有一个由express处理的websocket服务器,它在同一个应用程序中处理,我想在ws.on("connection",...)
和ws.on("message",...)
中获取req.session
对象。
问题在于没有对原始req
对象的引用,只有对websocket连接处理程序的包装器upgradeReq
的引用。
检查这个upgradeReq,我可以在ws.upgradeReq.headers.cookie
中找到connect.sid
,其中包含会话cookie值。
wss.on('connection', function connection(ws) {
var location = url.parse(ws.upgradeReq.url, true);
console.log(ws.upgradeReq.headers.cookie);
//....
});
我认为有可能以某种方式获取原始的req.session
。
我该如何实现这一点?