我有一个Express应用程序,其中有一些路由,只有其中两个需要支持会话。 我在各处都读到中间件定义(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 未定义。
如果我将 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 */
});