web-dev-qa-db-ja.com

Node.jsでAPIキーを使用する際のベストプラクティス

Node.jsアプリケーションで使用しているAPIキーがあります。現在、テキストファイルに保存し、アプリケーションの起動時にグローバル変数に格納します。

すっごく基本的にはそれだけです:

var key = getKey();
useKeyGetData(key);

このグローバル変数を持つのは好きではありませんし、ファイル間でやり取りするのは苦痛です。キーを必要な場所で必要なときに取得するより良い方法はありますか?そうするための標準はありますか?

26
Drake Main

特に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の値を保持します。

47