2012年11月21日水曜日

[node.js + express] 環境ごとに設定を切り替える

実行環境
node.js v0.8.14
express v3.0.3

環境変数 NODE_ENV


express は、アプリケーションの実行環境を、app.settings.env の値で判断しています。
app.settings.env は、 expressアプリケーション実行時に、環境変数 NODE_ENV の値で初期化されます。(環境変数 NODE_ENV が定義されていない場合は、'development' で初期化します。)

以下のコマンドで、アプリケーションの実行時に環境を指定できます。
$ export NODE_ENV=production && node app.js

app.configure で環境ごとの設定


app.configure では、1番目の引数で設定を反映させる環境を, 2番目の引数で設定用コールバックを指定します。
1番目の値が実際の環境( NODE_ENV, app.settings.env )と一致するときのみ、第2引数のコールバックを実行します。

また、 引数にコールバックのみ渡した場合は、すべての環境で設定用コールバックが呼び出されます。

app.js
//全環境共通の設定
app.configure(function(){
});

//開発環境用の設定
app.configure('development', function(){
});

//本番環境用の設定
app.configure('production', function(){
});

サンプル


express コマンドで生成した app.js を確認すると、development 環境のみの設定として、errorHandler ミドルウェア を呼び出しています。

app.js
app.configure('development', function(){
  app.use(express.errorHandler());
});

このミドルウェアは、エラー内容をフォーマットしてレスポンスで返してくれるため、開発時には非常に役に立ちます。
しかし、本番環境で実行してしまうと、アプリケーションの内部情報をユーザーに表示させることになってしまうため、開発環境のみに限定した設定となっています。

そのため、本番環境では、エラー時には専用のエラーページを表示させる、などの対策が必要になります。

app.js
app.configure('development', function(){
  app.use(express.errorHandler());
});

app.configure('production', function(){
  app.use(function(err, req, res, next){
    console.error(err.stack);
    res.status(500);
    res.render('500', {title: "エラーが発生しました。"});
  });
})

まとめ


express アプリケーションの環境は、環境変数 NODE_ENV で設定する。
app.configure() で、環境ごとの設定を定義する。

0 件のコメント:

コメントを投稿