在ExpressJS中,使用Ejs view engine時,發現session不能再ejs page中直接取用,所有參數都必須靠render時候傳遞過去...跟asp, jsp等scriptlet language操作上有明顯的不同...@@
為了達到可以在ejs中直接取用,這邊可以使用ejs page的locals變數,locals變數在route設定時候可以使用res.locals來取出,這時候只要將它與req.session做串連(res.locals.session = req.session)即可讓前端的ejs page直接透過<%=locals.session%>或是<%=session%>的方式來操作session...
而如果要在每一個route中設定res.locals.session,這樣也太麻煩... 我們可以透過app.use的方式來設定:
app.use(function(req, res, next){
res.locals.session = req.session;
next();
});
這樣所有的route在執行的時候都會先跑過一次這個動作,所以在使用時候可以這樣:
[app.js]
app.get('/', function(req, res) {
req.session.user = {name: 'simon'}
...(skip)
});
[view/index.ejs]
...(skip)
<%=session.user? 'got user: '+session.user.name : 'no user...'%>
...(skip)
這時候從ejs取用session的物件就單純多了 :D