2017/02/20更新

[NodeJS] Express4でセッションを扱う

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
仕事で色々と調べることがあったので、今日はnode.jsのExpress4で、セッションを扱う方法をブログに書きたいと思います。
画像

目次




ミドルウェア(express-session)を利用する

express4からは各種ミドルウェアが別モジュールになりました。セッション管理にはexpress-sessionを利用します。



準備する

express4も含めて準備を行います。まずはお決まりのpackageのインストールです。npm init-yオプションがあるんですね。エンターキーを押す手間が減って便利です。
$ npm init -y
$ npm install --save express
$ npm install --save express-session
続いて、Express4のシンプルなアプリケーションを実装します。
# app.js

var express = require('express');

app = express();


app.get('/', (req, res) => {
    res.send('Hello from express4!');
});

app.listen(3000, () => {
    console.log('App listening on port 3000.');
});
これで以下のコマンドで実行できればOKです(ここでnode-devで自動リロードを用いると、サーバー開発は楽チンです。余談ですが)。
$ node app.js

# または
$ node-dev app.js
これで「http://localhost:3000」にアクセスできれば準備完了です。



実装する

express-sessionには様々なオプションが存在します、詳細はexpress-sessionのREADME(英語)をご覧ください。ここではシンプルな使い方で、上のサンプルソースを拡張したいと思います。
var express = require('express');

// express-sessionを読み込む
var session = require('express-session');

app = express();

// セッションの設定を行います.
app.use(session({

    // 必須項目(署名を行うために使います)
    secret : 'my-special-secret', 

    // 推奨項目(セッション内容に変更がない場合にも保存する場合にはtrue)
    resave : false,               
    
    // 推奨項目(新規にセッションを生成して何も代入されていなくても値を入れる場合にはtrue)
    saveUninitialized : true,                

    // アクセスの度に、有効期限を伸ばす場合にはtrue
    rolling : true,

    // クッキー名(デフォルトでは「connect.sid」)
    name : 'my-special-site-cookie',

    // 一般的なCookie指定
    // デフォルトは「{ path: '/', httpOnly: true, secure: false, maxAge: null }」
    cookie            : {
        // 生存期間(単位:ミリ秒)
        maxAge : 1000 * 60 * 60 * 24 * 30, // 30日
    }
}));

app.get('/', (req, res) => {

    // セッションから値を読み込みます.
    // ここではJavaScriptのオブジェクトをセッションに入れています.
    let user = req.session.user || { prevAccess : null, pv : 1 };

    // 前回のアクセス日時
    let prevAccess = user.prevAccess;

    // ユーザーごとのPageView
    let pv = user.pv;

    // 今回アクセス分を更新して、セッションに保存します.
    user.pv += 1;
    user.prevAccess = new Date();
    req.session.user = user;

    // レスポンス返却
    res.send(`Hello from express4! pv=${pv}, prevAccess=${prevAccess}`);
});

app.listen(3000, () => {
    console.log('App listening on port 3000.');
});
と、上記のように使うことができます。簡単に使えて便利ですね。本番では使いそうなhttpsの設定や、リバースプロキシ設定などもありますので、詳細は下記の参考資料をご覧ください(必要になったら僕もブログに書きたいと思います)。



参考資料

以下のページを参照しました。
https://github.com/expressjs/session/blob/master/README.md



最後に

Express4はこれからドンドンと使いそうなので、色々と学んでブログにも残したいと思います。

最後になりますが本ブログでは、Node.js・Python・Linux・フロントエンド・インフラ・Go言語・開発関連・Swift・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。