Node.jsサーバーによって起動された 'upgrade'イベントから、Express.jsフレームワークを使用してセッションオブジェクトにアクセスしようとしています。セッションのサポートを正しく設定してあり、標準の.get .post .putおよび.deleteメソッドからアクセスできます。Node.js + Express.js(Connect) - 'upgrade'イベントからのセッションへのアクセス
app.get('/', function(req, res) {
req.session.test = 'Hello world'; // Works fine
res.render('index');
});
しかし、私はそうのように、サーバー上で「アップグレード」イベントをフックアップした場合:
app.on('upgrade', function(req, socket) {
var message = req.session.test; // Doesn't work
});
私は、セッションオブジェクトにアクセスすることはできません。私が知っている限り、Connect Sessionミドルウェアはget/post/put/deleteメソッドのセッションを接続しますが、 'upgrade'などのカスタムイベントはセッションを連結しません。
FYI、WebSocketハンドシェイク中にクライアントから 'upgrade'イベントが発行されましたが、最初のWebSocketハンドシェイクからセッションにアクセスしようとしています。セッションクッキーは間違いなく、ハンドシェイク中のHTTPヘッダーにあります。例:
app.on('upgrade', function(req, socket) {
var cookieHeader = req.headers['cookie'];
console.log(cookieHeader);
});
... Connectセッションクッキーを出力します。おそらく生のセッションクッキートークンを使ってセッションオブジェクトを手動で構築する方法はありますか?
更新:はNode.jsのIRCチャットルームの一部の人に話すにされて、どうやらこれは非常にdifficaltまたは不可能のいずれかです。 Connectミドルウェアは、「アップグレード」などのカスタム/珍しいイベントにはさらされません。
https://github.com/senchalabs/connect/issues/342
セッションストアを使用してセッションを作成することをお勧めします。しかし、このイベントはnode.jsレベルで結ばれています。 –