express とか久し振りだわー 3.0.0 とか慣れないわーと思いながら書いてたらセッション管理しようとしてハマった。のでメモ。
とりあえず今回はカジュアルなセッション管理なので cookie でいいや、と思って調べてたらこんなのがあった。
express cookieSession()
例を見るとこんな感じで書ける、とある。
app.use(express.cookieSession({secret:'hogehoge'})); req.session = {/* obj */}; //set req.session = null; //clear
おお、簡単だ、と思ってやってみたらこんなエラーが出るようになった。なんやねん。
TypeError: Cannot read property 'connect.sess' of undefined at Object.cookieSession [as handle] (/Users/tagomoris/Documents/..../express/node_modules/connect/lib/middleware/cookieSession.js:73:34) at next (/Users/tagomoris/Documents/..../express/node_modules/connect/lib/proto.js:190:15) at resume (/Users/tagomoris/Documents/...../express/node_modules/connect/lib/middleware/static.js:60:7) at SendStream.error (/Users/tagomoris/Documents/..../express/node_modules/connect/lib/middleware/static.js:73:37) (以下省略)
ぐぐってみても「connect の 2.0 以上を使え」みたいなのがひっかかるだけでわからん。スタックトレースの該当部分を見ても connect.sess なんて呼び出しは無いぞ。なんなんだ。
とTwitterに愚痴ったら親切な人が教えてくれました!
@tagomoris cookieParser ミドルウェアを cookieSession の前に呼んでないとか?
2012-10-30 16:36:30 via YoruFukurou to @tagomoris
ずばりこの通りでした。ありがとうございました。
考えてみたら当たり前だ。parserを通さないとcookieを使う準備ができてない。
app.use(express.cookieParser()); app.use(express.cookieSession({secret:'hogehoge'});
解決!