いくつかのルートを持つ Express アプリケーションがありますが、セッションをサポートする必要があるのはそのうちの 2 つだけです。ミドルウェア定義 (app.use(express.session({...)) はその後に続くルートにのみ適用されることをどこでも読んだので、このサンプルを作成しました:
var express = require('express');
var app = express();
app.use(express.bodyParser());
app.get('/path1', function (req, res) {
res.send('text response');
});
app.use(express.cookieParser());
app.use(express.session({
secret: 'secret',
cookie: { maxAge: new Date(Date.now() + 2 * 60 * 1000) }
}));
app.get('/path2', function (req, res) {
res.session.test = { "test": "test" };
res.send('text response');
});
app.listen(8088);
しかし、これは機能しません: /path2 res.session は未定義です。
セッションミドルウェア定義を上に移動すると、すべてが機能しますが、/path1 を呼び出すときにセッションが作成されていることがわかります (これは避けたいことです)。
単一のアプリケーションが一部のルートでのみセッションを使用できる方法を誰かが説明できますか?
ありがとう!
///// アップデート //////
さらに掘り下げた後、私はそれを理解しました:
使用しないでください:app.use(express.session({ ... }));
代わりに、次を定義します。
var sessionMiddleware = express.session({
//session configurations
});
function sessionHandler(req, res, next) { sessionMiddleware(req, res, next); }
次に、セッションのサポートが必要な特定のルートにハンドラーを適用します。
app.get('/path_that_need_session', sessionHandler, function (req, res) {
/* Do somthing with req.session */
});