Help us understand the problem. What is going on with this article?

[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と表示される

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした