我有一些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);
但這並不工作:in/path2 res.session是未定義的
如果我將會話中間件定義向上 - 一切正常,但我看到正在創建會話時調用/ path1(這是我想要避免的)
有人可以解釋一個單個應用程序可以使用會話中只有某些路線。
謝謝!
///// UPDATE //////
更多挖後 - 我想通了:
不要使用:app.use(express.session({ ... }));
相反 - 定義如下:
var sessionMiddleware = express.session({
//session configurations
});
function sessionHandler(req, res, next) { sessionMiddleware(req, res, next); }
然後應用處理器上的特定路由/ s的需要會話支持:
app.get('/path_that_need_session', sessionHandler, function (req, res) {
/* Do somthing with req.session */
});
爲了讓你的答案更加清晰,爲什麼不把它寫成答案並接受答案(沒關係)。對於我將會話隔離到某些路線非常有效。謝謝。 – 2013-06-06 18:45:35