web-dev-qa-db-ja.com

セッションストアにExpress / Redisを使用する場合、「セッション」は未定義です

Expressアプリのセッションでredisを使用しようとしています。

私は次のことを行います:

var express = require('express');
var RedisStore = require('connect-redis')(express);

app.configure('development', function(){     
    app.use(express.session({ secret: "password", 
                            store: new RedisStore({
                                          Host: "127.0.0.1",
                                          port: "6379",
                                          db: "mydb"
                                        })  
          }));

後で、私のアプリで、次のようなことをした場合:

var whatever = req.session.someProperty;

私は得ます:

未定義のプロパティ 'someProperty'を読み取れません

これは、req.sessionが未定義であることを示しています(これは私の構成セクションのconsole.logエントリから確認できます)

私は間違いなくredisを実行していて、私のアプリが最初にそれに接続するのを見ることができます(redis-cliモニターを使用)

21
Alex

あなたが欠落しているようです:

_app.use(express.cookieParser());
_

app.use(express.session(...));呼び出しの前。

こちら を参照してください。

10
JohnnyHK

これらの3つをこの順序で使用しないと、セッションは機能しません。

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

ルーターがセッションを使用するために必須であるかどうかはわかりませんが、ルーターがセッションの前に配置されていると、ルーターが機能しなくなります。

53
Yxven

同じ問題がありましたが、最新バージョンのExpressの変更が原因です。

次に、session.Storeを拡張するために、関数connect-redisエクスポートにexpress-sessionを渡す必要があります。

var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);
4
smilledge

Express 3/Express 4で最近変更されました。バージョン4を使用していることを確認してください。

完全なミドルウェアの概念が変更されました。これらのミドルウェアは手動でインストールする必要があります。 「express-session」は4.0ミドルウェアの1つです。

私は読むことをお勧めします

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3- および https://github.com /visionmedia/express/wiki/Migrating-from-3.x-to-4.x

さらに、一部のユーザーは github repo 自体が単に「セッション」という名前であると混乱しましたが、

npm install express-session

正しい。

4
sebilasse

私も同じ問題を抱えていました。 redisは単に別のポートに設定されていることがわかりました。

2
kaore