2016-02-12 5 views
17

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

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

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

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

+0

Что случилось с сохранением его в файле .js и экспортированием значений? Тогда вы можете просто потребовать их там, где вам это нужно. –

+0

По-видимому, я не понимаю ваш вопрос. если вы не хотите, чтобы это глобально требовало его локально. – Kuf

ответ

27

Обычная альтернатива тому, что вы делаете, особенно при использовании ключей API, заключается в использовании environment variables. Это настройка конфигурации на уровне операционной системы. Каждый процесс имеет свой собственный набор переменных среды, обычно унаследованных от его родительского процесса. По соглашению переменные среды имеют имена в верхнем регистре.

В 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.

+1

А, спасибо. Именно то, что я искал: стандартные соглашения для обработки моего ключа. –

+0

Я пытаюсь понять, почему это хороший смысл. Я планирую использовать dotenv для production nodejs-сервера, но хочу понять, как этот файл лучше, чем позволяет сказать '' '' contants.json''' или npm конфигурационный модуль? Не могли бы вы объяснить, что является безопасностью/выгодой для передачи учетных данных через переменные среды? – codneto

+0

Чтобы быть уверенным, что мы на одной странице, не путайте dotenv с самими переменными среды. dotenv - это просто пакет npm, который упрощает работу с ними, поддерживая использование файла, в котором вы можете указать env vars. Файл удобен; это не то, что сами переменные среды. Преимущество env vars над произвольным файлом constants.json в том, что это стандартный способ настройки процессов. Docker, systemd, upstart и т. Д. Все понимают этот способ настройки нескольких _separate_ экземпляров процесса. –

 Смежные вопросы

  • Нет связанных вопросов^_^