4

これは私の Express ミドルウェア スタックです。

var server = express()
    .use(express.cookieParser())
    .use(express.session({secret: 'Secret'}))
    .use(express.bodyParser())
    .use(function printSession(req, res, next) {
        console.log(req.session.user);
        next();
    })
    .use(express.static('./../'));

ここに2つのルートがあります:

server.post('/setSession', function (req, res) {
    req.session.user = 'admin';
}

server.post('/getSession', function (req, res) {
    console.log(req.session.user);
}

これで、ルート ハンドラでのセッション管理が機能します。によって確認されたように、設定できsession.user、同じセッション内の後続のリクエストに対して持続しgetSessionます。ただし、ミドルウェア関数printSessionは常に出力しundefinedます。

sessionミドルウェアで設定されたオブジェクトにアクセスするにはどうすればよいですか?

4

2 に答える 2

3

このプログラムは正常に動作します。にアクセスする前に/setSession、ミドルウェアが出力しafter session: undefinedます。/setSession を取得すると、出力されafter session: adminます。(curl ではなく) テストしているブラウザーがセッション Cookie を保存して送信する限り、これは期待どおりに機能します。

var express = require('express');
var server = express();
server.use(express.cookieParser());
server.use(express.session({secret: 'SEKRET'}));
server.use(function (q,r,n) {console.log('after session:', q.session.user);n();});
server.get('/', function (q,r,n) {r.send("you got slashed");});
server.get('/setSession', function (req, res) {
  console.log("logging admin in via /setSession");
  req.session.user = 'admin';
  res.send("admin logged in");
});
server.listen(3000);
于 2013-01-19T16:27:52.667 に答える
0

設定に問題があるはずです。次の例は、コードに非常に似ていますが、GET代わりPOSTに使用しますが、私にとっては正常に機能します

app.configure(function(){
  // ...
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());

  app.use(function(req, res, next) {
    console.log(req.session.user + ' from middleware');
    next();
  });

  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.get('/getSession', function(req, res) {
  console.log(req.session.user);
  res.send('awesome');
});

app.get('/setSession', function(req, res) {
  req.session.user = 'admin';
  res.send('done');
});

これで、次のことを行うと、すべてが期待どおりに機能します

  1. GET / getSession =>ミドルウェアから未定義、未定義
  2. GET /setSession=>ミドルウェアから未定義
  3. GET / getSession =>ミドルウェアからの管理者、管理者
于 2013-01-19T12:43:39.210 に答える