У меня есть приложение Express с некоторыми маршрутами, только два из них должны поддерживать сеансы. я читал везде, что определение промежуточного слоя (app.use (express.session ({...) применяется только к маршрутам, что приходит после него, так что я создал этот образец:NodeJS + Express - применить промежуточное ПО промежуточного уровня к некоторым маршрутам
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 (это то, что я хочу, чтобы избежать)
. Может кто-нибудь объяснить, как одно приложение может использовать сеанс только некоторые из маршрутов.
Спасибо!
///// UPDATE //////
После еще копания - я понял это:
Не используйте: 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 */
});
Чтобы сделать ваш ответ более понятным, почему бы не написать его как ответ и принять его (это нормально). Для меня это очень хорошо работало, чтобы изолировать сеансы до определенных маршрутов. Благодарю. –