たごもりすメモ

コードとかその他の話とか。

express 3.0 で cookieSession を使うときは cookieParser も明示的に呼べ

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に愚痴ったら親切な人が教えてくれました!

ずばりこの通りでした。ありがとうございました。
考えてみたら当たり前だ。parserを通さないとcookieを使う準備ができてない。

app.use(express.cookieParser());
app.use(express.cookieSession({secret:'hogehoge'});

解決!