Ich habe eine Anwendung auf Express, Express-Sitzung und WS (für die Websocket-Unterstützung) gebaut.Node.js, ws und express-session: Wie bekomme ich ein Session-Objekt von ws.upgradeReq
Ich habe diesen Code verwendet, um die Session-Middleware zu aktivieren:
app.use(session({secret: 'mysecret',resave: true,saveUninitialized: true,cookie: {}}));
Und ich kann mit Session-Variablen in einem get-Handler lesen und speichern:
app.get('/', function (req, res) {
res.send('Hello World!');
console.log(req.session.test);
req.session.test="OK";
req.session.save();
});
(das erste Mal, er druckt " undefined "und das zweite Mal druckt" OK "wie erwartet)
Jetzt habe ich einen Websocket-Server, der von Express auch in der gleichen App behandelt wird, und ich möchte diebekommenObjekt innerhalb der ws.on("connection",...)
und in ws.on("message",...)
.
Das Problem ist, dass es keinen Verweis auf das ursprüngliche Objekt req
gibt, nur eine Referenz auf eine upgradeReq
, die ein Wrapper des Verbindungshandlers der Websocket ist. Überprüfen dieses upgradeReq Ich kann die connect.sid
in ws.upgradeReq.headers.cookie
finden, die den Session-Cookie-Wert enthält.
wss.on('connection', function connection(ws) {
var location = url.parse(ws.upgradeReq.url, true);
console.log(ws.upgradeReq.headers.cookie);
//....
});
In meiner Idee möglich sein, könnte die ursprüngliche req.session
daraus in irgendeiner Weise zu erhalten.
Wie kann ich das erreichen?
FYI, das für mich gearbeitet, wenn sie in Verbindung mit Passport zum Einsatz. In diesem Fall endete ich mit te Benutzer in ws.upgradeReq.session.passport.user. Vielen Dank! – logidelic
Hallo, Ich versuche das gleiche zu tun, aber ich kann nicht verstehen, warum ws.upgradeReq nicht definiert ist. Kann mir jemand helfen? – dritan
@dritan gab es eine kürzlich brechende Änderung in WS 3.0. ws.upgradeReq wurde entfernt. Wenn Sie nach "ws breaking change upgradeReq" suchen, erhalten Sie weitere Informationen. – user1562766