9

Express、express-session、および ws (websocket サポート用) で構築されたアプリケーションがあります。

このコードを使用して、セッション ミドルウェアを有効にしました。

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();
});

(最初は「未定義」と出力され、2回目は期待どおり「OK」と出力されます)

これで、同じアプリ内でも Express によって処理される Websocket サーバーがあり、およびreq.session内のオブジェクトを取得したいと考えています。ws.on("connection",...)ws.on("message",...)

問題は、元のreqオブジェクトへの参照がなくupgradeReq、websocket の接続ハンドラーのラッパーである への参照があることです。この upgradeReq を調べると、セッション cookie の値を含むconnect.sidを見つけることができます。ws.upgradeReq.headers.cookie

wss.on('connection', function connection(ws) {
  var location = url.parse(ws.upgradeReq.url, true);
  console.log(ws.upgradeReq.headers.cookie);
  //....
});

req.session私の考えでは、何らかの方法でこれからオリジナルを取得することが可能になる可能性があります.

どうすればこれを達成できますか?

4

2 に答える 2