Edited at

[Node.js]Express4で環境ごとの設定をつくる

More than 3 years have passed since last update.


Express4で環境ごとの設定をつくる


基礎知識

Express4では環境変数「NODE_ENV」によって環境を定義することができる。

例えば、開発環境(development)、ステージ環境(stage)、本番環境(production)のような設定。

NODE_ENVの指定は起動時に指定したりする。

指定しなければdevelopmentになる。

NODE_ENV=stage npm start

プログラム中に今どの環境向けに動作しているのかを知りたい場合は以下のようなコード書こう。

var app = require('app');    // ルートのapp.jsをrequireする

var env = app.get('env'); // envに入っている
or
var env = process.env.NODE_ENV; // 環境変数にアクセスできる

環境ごとに処理したい場合、Express3ではapp.configureメソッドを使えていたが、Express4でこのメソッドは廃止されていることに注意する。

var app = require('app');    // ルートのapp.jsをrequireする

// Express3
app.configure('development', function () {
// 開発環境のみ
});
app.configure('stage', function () {
// ステージ環境のみ
});

// Express4
var env = app.get('env');
if (env == 'development') {
// 開発環境のみ
}
if (env == 'stage') {
// ステージ環境のみ
}


環境ごとの設定をつくる

本題。

「環境ごとにデータベースの接続先が違うから各環境ごとに設定ファイルを用意して、データベース接続する際は裏側で勝手に設定ファイルよんで接続して欲しい。」ということは良くある。

configモジュールを使う。

npm install config --save

configディレクトリを作成して、default.jsonをつくれと書いてあるので従う。

mkdir config

vi config/default.json
{
"db": {
"master": {
"host": "127.0.0.1",
"user": "usr",
"password": "pass",
"database": "mydatabase"
},
"slave": {
"host": "127.0.0.1",
"user": "usr",
"password": "pass",
"database": "mydatabase"
}
}
}

例えば、開発環境向け専用の設定ファイルを作成する場合は「config/NODE_ENVに設定した値.json」を用意しておけば、そちらに書かれている内容で上書きされるみたい。

プログラムから設定を読み込むには以下のようにする。

var config = require('config');

conole.log(config.db.master.host); // 127.0.0.1と表示される

これでソースコード上からは今どの環境向けに動作しているかを気にしなくてよくなった。