はじめてのExpress4

暑い。とにかく暑い。
ここ数ヶ月、仕事とプライベートの疲れから久々に日中からねむねむモードでした。

本来ならRevelでいろいろ片付けたかったのですが、Socket.io(node.js)とのセッション統合がどうにもこうにも、モチベーションが上がらず、後回しって事に。ならば、その実績も充分なExpressやるべって事に。

まず、この考えが蜂蜜に練乳混ぜるぐらい甘かった。
なにしろ、Express4の情報がすくねぇ_| ̄|○

ブログ情報がExpress3系だなんて、だれも(ry

さて、いろいろ忘れそうなので、備忘録。

    • node.jsのインストール

まず、node.js自体は、公式から各OSにあった奴入れるって事で。
rvmとかgvm相当の管理ツールは後回し。

$ mkdir app_name
$ cd app_name
    • パッケージ管理json作成

データベースは、mongodb、セッションは、Redis、テンプレートはECTと、初心者にしては、超盛りだくさん!
mongodbとredisは、Fusionで別にセットアップ済み、勿論Chefにお任せクッキングしております。
四方八方、超敏感な地雷原となっています。

$ vi package.json
{
  "name": "benchwork",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "*",
    "morgan": "*",
    "ect": "*",
    "config": "*",
    "mongoose": "*",
    "express-session": "*",
    "connect-mongo": "*",
    "connect-redis": "*",
    "body-parser": "*",
    "cookie-parser": "*",
    "socket.io": "*"
  }
}

まず、Express3のチュートリアルを某サイトでみたから、packageで分離とか、地球上の雷を一身で受けた気分ですよ。
それに、express系のまとまったモジュールが、細分化されたとかで、ログとか、parser関連も別々にインストールしないといけなくなったらしいです。つーか、しらんのワシだけ。下記URL様、ありがとうございます。
http://qiita.com/hoshi-takanori/items/2128a6cf1dbb533379a2

$ npm install

ここで、はいんないよ(つд⊂)エーン的なモジュールがあったら、sudo付けてぶち込んでます。
反論は認めるけど賠償はしない●ダ。

    • ログイン

http://qiita.com/n0bisuke/items/2514197d8791abbc7d87
上記ブログ様で、mongodbを使った方法が懇切丁寧に解説されております。
テンプレートエンジンがEJS?なので、ECTに読み替える必要があります。
とはいえ、変数に@を付けるだけでした。しかも一カ所。

      • セッション周り

Redisにセッションを任せたので、その辺の設定をば
app_name/app.js

 ・
 ・
 ・
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());   // cookie用
app.use(session(
    {
      store: new RedisStore({
          host: "192.168.0.253",
          port: 6379
        }
      ),
      secret: 'keyboard cat',
      resave: true,
      saveUninitialized: true,
      cookie: {
        httpOnly: false,
        maxAge: new Date(Date.now() + 60 * 60 * 1000)
      }
    }
  )
);
 ・
 ・
 ・

Redisストアを使うところは、見れば何となくわかると思います。
オプションは、
https://github.com/tj/connect-redis
を見ること。
セッションについては、
https://github.com/expressjs/session
を見ること。
go Revle の
c.Session.SetDefaultExpiration()
c.Session.SetNoExpiration()
的は所は、resaveでやってるぽいです。
英語なので、うっすら感じただけです。誰か訳して教えて下さい。

これで、rdmとかRobomongoとか使って中身確認すると、うまくいっている(と思うよ)ことが確認できました。