Node.js
環境
サーチ…
環境変数へのアクセス
process.env
プロパティは、ユーザー環境を含むオブジェクトを返します。
次のようなオブジェクトを返します。
{
TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node'
}
process.env.HOME // '/Users/maciej'
環境変数FOO
をfoobar
に設定すると、次のようにアクセスできます。
process.env.FOO // 'foobar'
process.argvコマンドライン引数
process.argvは、コマンドライン引数を含む配列です。最初の要素はnode
、2番目の要素はJavaScriptファイルの名前になります。次の要素は、追加のコマンドライン引数です。
コード例:
すべてのコマンドライン引数の出力合計
index.js
var sum = 0;
for (i = 2; i < process.argv.length; i++) {
sum += Number(process.argv[i]);
}
console.log(sum);
使用法の主張:
node index.js 2 5 6 7
出力は20
なります
コードの簡単な説明:
ここでforループfor (i = 2; i < process.argv.length; i++)
ループは2で始まりfor (i = 2; i < process.argv.length; i++)
なぜなら、process.argv配列の最初の2つの要素は常に ['path/to/node.exe', 'path/to/js/file', ...]
process.argv配列内の要素は常に stringであるため、 Number(process.argv[i])
変換する
dev、qa、stagingなどの異なる環境に異なるプロパティ/設定を使用する
大規模なアプリケーションでは、異なる環境で動作させるときに異なるプロパティが必要になることがよくあります。 NodeJsアプリケーションに引数を渡し、特定の環境プロパティファイルをロードするためにノードプロセスで同じ引数を使用することで、これを実現できます。
異なる環境に2つのプロパティファイルがあるとします。
dev.json
{ PORT : 3000, DB : { host : "localhost", user : "bob", password : "12345" } }
qa.json
{ PORT : 3001, DB : { host : "where_db_is_hosted", user : "bob", password : "54321" } }
アプリケーションの次のコードは、使用するそれぞれのプロパティファイルをエクスポートします。
コードがenvironment.jsにあるとします
process.argv.forEach(function (val, index, array) {
var arg = val.split("=");
if (arg.length > 0) {
if (arg[0] === 'env') {
var env = require('./' + arg[1] + '.json');
module.exports = env;
}
}
});
我々は、次のようにアプリケーションに引数を与えます
node app.js env=dev
私たちは同じくらい簡単として永遠にそれ以上のようなプロセス・マネージャを使用している場合、
forever start app.js env=dev
設定ファイルの使い方
var env= require("environment.js");
「プロパティファイル」から環境プロパティをロードする
- プロパティリーダーをインストールする:
npm install properties-reader --save
- プロパティファイルを格納するディレクトリenvを作成します。
mkdir env
- environments.jsを作成する :
process.argv.forEach(function (val, index, array) {
var arg = val.split("=");
if (arg.length > 0) {
if (arg[0] === 'env') {
var env = require('./env/' + arg[1] + '.properties');
module.exports = env;
}
}
});
- サンプルdevelopment.propertiesプロパティーファイル:
# Dev properties
[main]
# Application port to run the node server
app.port=8080
[database]
# Database connection to mysql
mysql.host=localhost
mysql.port=2500
...
- ロードされたプロパティの使用例:
var enviorment = require('./environments');
var PropertiesReader = require('properties-reader');
var properties = new PropertiesReader(enviorment);
var someVal = properties.get('main.app.port');
- 高速サーバーの起動
npm start env=development
または
npm start env=production