21

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モニターを使用)

4

5 に答える 5

53

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

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

セッションを使用するためにルーターが必須かどうかはわかりませんが、セッションの前に配置するとルーターが壊れます。

于 2012-04-20T01:43:27.150 に答える
10

行方不明のようです:

app.use(express.cookieParser());

あなたのapp.use(express.session(...));電話の前に。

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

于 2012-04-17T13:01:08.853 に答える
4

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

session.Store を拡張するには、express-session を関数 connect-redis exports に渡す必要があります。

var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);
于 2014-03-08T11:06:28.110 に答える