0

nodejs Webアプリケーションを作成するために機関車フレームワークを使用しています。

config/environments/all.js私は持っています:


var express = require('express')
, poweredBy = require('connect-powered-by')
, util = require('util')
, connectAssets = require('connect-assets')
, redis = require('redis')
, RedisStore = require('connect-redis')(express)
, sessionStore = new RedisStore();

........
........

  this.use(express.cookieParser());
  this.use(express.bodyParser());
..........
..........
  this.use(express.session({
    secret: 'LoremIpsumDolorSit_Amet',
    store: sessionStore
  }));

ただし、セッション オブジェクトはリクエスト オブジェクトに存在しません。すなわち。コントローラ インスタンス内: this.req.sessionは未定義です。不足しているものと、 redis data-store を使用するように connect-session ミドルウェアを構成するにはどうすればよいですか?

Redis サーバーはデフォルトのポートで実行されており、サーバーを実行するとクライアントが接続されていることが示されます。サーバーを終了したときにのみ、クライアントが切断されます。

Fedora 16 で Node 0.6.18、redis サーバー バージョン 2.4.8、機関車バージョン 0.3.3、express 3.0.4 を使用しています。

4

2 に答える 2

0

ではthis.use()、Express の要求/応答処理にミドルウェアを追加します。着信要求はアプリケーションに到達する前にすべてのミドルウェアを通過し、発信応答はクライアントに送り返される前にミドルウェア チェーンを遡ります。

ミドルウェアをインストールする順序は重要です。あるミドルウェア ( などexpress.session) が別のミドルウェア ( などexpress.cookieParser、セッション Cookie を解析するため) に依存している場合は、最初に依存関係をインストールします。

ほとんどの場合、this.router最後に、またはほぼ最後にインストールする必要があります (通常はエラー処理ミドルウェアが続きます)。

于 2013-01-10T07:16:42.947 に答える
0

セッションがエクスプレスで機能するには、次の 3 つがまさにこの順序である必要があります。


this.use(express.cookieParser());
this.use(express.session(...));
this.use(this.router);

私の実装では、2 番目の上に 3 番目のステートメントがありました。

どうやら、これは Express の既知の特異性であり、Express の内部動作について十分な情報が得られていないため、その理由を説明できません。おそらく、NodeJS の経験が豊富な人なら、詳細を説明できるでしょう。

于 2012-12-09T03:37:04.430 に答える