Лучшая практика при использовании ключа API в Node.js

У меня есть ключ API, который я использую в моем приложении Node.js. В настоящее время я сохраняю его в текстовом файле и помещаю его в глобальную переменную, когда мое приложение запускается.

В основном это просто:

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

Мне не нравится иметь эту глобальную переменную, и мне больно проходить между файлами. Есть ли лучший способ получить мой ключ там, где он мне нужен? Есть ли какой-то стандарт для этого?

Ответы

Ответ 1

Традиционная альтернатива тому, что вы делаете, особенно когда речь идет о ключах 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

Если вы явно передадите один, он переопределит любое значение, которое вы указали в файле .env:

$ MY_VARIABLE=bar node app.js

Теперь переменная среды MY_VARIABLE будет иметь значение "bar" вместо "testing". Поскольку OTHER_VARIABLE не передается явно, он сохраняет значение "foo", указанное в файле .env.