Node.jsアプリケーションで使用しているAPIキーがあります。現在、テキストファイルに保存し、アプリケーションの起動時にグローバル変数に格納します。
すっごく基本的にはそれだけです:
var key = getKey();
useKeyGetData(key);
このグローバル変数を持つのは好きではありませんし、ファイル間でやり取りするのは苦痛です。キーを必要な場所で必要なときに取得するより良い方法はありますか?そうするための標準はありますか?
特にAPIキーに関係する場合、あなたがしていることに対する従来の代替手段は、 環境変数 を使用することです。これは、オペレーティングシステムレベルの構成機能です。各プロセスには独自の環境変数セットがあり、通常は親プロセスから継承されます。慣例により、環境変数には大文字の名前が付いています。
Node.jsでは、 process.env
を使用して環境変数にアクセスできます。たとえば、次のようなアプリケーションを実行する場合:
$ MY_VARIABLE=test node app.js
MY_VARIABLE
環境変数の値には、次の方法でアクセスできます。
process.env.MY_VARIABLE
ただし、プログラムを呼び出すたびに環境変数を渡し続けるのは面倒です。そのため、環境変数をテキストファイルに保存できる dotenv などのパッケージがあります。
より具体的には、.env
というファイルがあり、その中には次のようなものがあります。
MY_VARIABLE=test
OTHER_VARIABLE=foo
app.js
の最初に、次のことを行います。
require('dotenv').config();
これは、.env
ファイルから環境変数値を読み取ります。その後、他の環境変数にアクセスするのと同じようにそれらにアクセスできます。
console.log("MY_VARIABLE: " + process.env.MY_VARIABLE);
console.log("OTHER_VARIABLE: " + process.env.OTHER_VARIABLE);
これで、呼び出し時に明示的に環境変数をアプリケーションに渡す必要がなくなりました。つまり、通常どおりに実行できます。
$ node app.js
明示的に渡すdoの場合、.env
ファイルで指定した値はすべて上書きされます。
$ MY_VARIABLE=bar node app.js
これで、MY_VARIABLE
環境変数の値は"bar"
ではなく"testing"
になります。 OTHER_VARIABLE
は明示的に渡されないため、"foo"
ファイルで指定された.env
の値を保持します。