2011年11月23日 星期三

在 NodeJS + Express 使用 Cookie-based Session

Standard
開發網站的人應該對 Session 都不陌生,主要是用於 Client 與 Server 之間的溝通和狀態記錄。底層的實作細節本文就不多說明,若仍不理解他的用途,只要知道它可以讓你在不同頁面之間傳遞資料,像是登入狀態等。

一般標準的『Express』利用『Connect Middleware Framework』(之後簡稱 Connect)中的模組來實作 Session 的,而預設的方法是使用 MemoryStore 的方式,也就是將 Session 資料存放於記憶體上。若你開發的是中大型的網站,也可以使用 Connect 的第三方模組『connect-redis』,利用『Redis』這樣的 Key-Value Database 來存放 Session 的資料。這些在 NodeJS + Express 的各類開發文獻中相當常見,你可以從許多網站上找到使用方法。

不過,也許你仍不滿足,希望使用近年來興起的 Cookie-based Session,Connect 也有第三方模組『cookie-sessions』可以使用。

可以直接使用 npm 安裝:
npm install cookie-sessions

在你的 app.js 這樣使用:
var express = require('express');
var CookieStore = require('cookie-sessions');

var app = module.exports = express.createServer();

app.configure(function(){
 app.set('views', __dirname + '/views');
 app.set('view engine', 'jade');
 app.use(express.bodyParser());
 app.use(express.methodOverride());
 app.use(express.cookieParser());
 app.use(CookieStore({ secret: 'FredChien' }));
 app.use(app.router);
 app.use(express.static(__dirname + '/public'));
});

app.get('/', function(req, res) {
 req.session = { email: 'cfsghost@gmail.com' };

 /* Redirect to another page */
 res.redirect('/getsession');
});

app.get('/getsession', function(req, res) {
 if (req.session)
  res.end('This is Fred's email address:' + req.session.email);
});

app.listen(3000);

後記

其實 NodeJS 還算發展階段,相關資源不算很多,若想要實作過去常用的一些功能,會需要花點功夫請教 Google 大神。