Как я могу проверить, установлена ли переменная окружения в Node.js?

Я хотел бы проверить, установлена ли переменная среды на моем сервере Express JS, и выполнять различные операции в зависимости от того, установлена она или нет.

Я пробовал это:

if(process.env.MYKEY !== 'undefined'){
    console.log('It is set!');
} else {
    console.log('No set!');
}

Я тестирую без process.env.MYKEY, но консоль выводит "Это установлено".

Ответ 1

Это нормально работает в моем проекте Node.js:

if(process.env.MYKEY) { 
    console.log('It is set!'); 
}
else { 
    console.log('No set!'); 
}

EDIT:

Обратите внимание, что, как упомянул @Salketer, в зависимости от потребностей, ложное значение в приведенном выше фрагменте будет рассматриваться как false. В случае, если ложное значение считается допустимым значением. Используйте hasOwnProperty или проверьте значение еще раз внутри блока.

> x = {a: ''}
{ a: '' }
> x.hasOwnProperty('a')
true

Или не стесняйтесь использовать оператор in

if ("MYKEY" in process.env) {
    console.log('It is set!');
} else {
    console.log('No set!');
}

Ответ 2

Почему бы не проверить, существует ли ключ в переменных среды?

if ('MYKEY' in Object.keys(process.env))
    console.log("It is set!");
else
    console.log("Not set!");

Ответ 3

Я использую этот фрагмент, чтобы узнать, установлена ли переменная окружения

if ('DEBUG' in process.env) {
  console.log("Env var is set:", process.env.DEBUG)
} else {
  console.log("Env var IS NOT SET")
}

Теоретические заметки

Как указано в NodeJS 8 документах:

Свойство process.env возвращает объект, содержащий пользовательскую среду. Смотрите environment (7).

[...]

Присвоение свойства в process.env неявно преобразует значение в строку.

 process.env.test = null
 console.log(process.env.test);
 // => 'null'
 process.env.test = undefined;
 console.log(process.env.test);
 // => 'undefined'

Хотя, когда переменная не установлена в среде, соответствующий ключ вообще отсутствует в объекте process.env, а соответствующее свойство process.env равно undefined.

Вот еще один пример (помните о кавычках, использованных в этом примере):

console.log(process.env.asdf, typeof process.env.asdf)
// => undefined 'undefined'
console.log('asdf' in process.env)
// => false

// after touching (getting the value) the undefined var 
// is still not present:
console.log(process.env.asdf)
// => undefined

// let set the value of the env-variable
process.env.asdf = undefined
console.log(process.env.asdf)
// => 'undefined'

process.env.asdf = 123
console.log(process.env.asdf)
// => '123'

Дополнительная информация о стиле кода

Стоит упомянуть, что оригинальный вопрос:

Как я могу проверить, установлена ли переменная окружения в Node.js?

уже содержит ответ. Чтобы обеспечить добавление разметки:

How can I [check if] an [env var] [is set] in [Node.js]?

Теперь буквально переведите это на JavaScript:

if ('env_var' in process.env)

Где:

  • [check if] = если
  • [env var] = 'env_var'
  • [is set] = в
  • [Node.js environment] = process.env

Просто и понятно.

Ответ 4

РЕДАКТИРОВАТЬ (удален старый неправильный ответ)

Как сказал Макскорюков, это должно быть:

# in test.js

if ("TEST_ENV" in process.env) {
    console.log("TRUE: " + process.env["TEST_ENV"])
} else {
    console.log("FALSE")
}

Это было верно, когда он прошел следующий тест:

$> node test.js
FALSE
$> export TEST_ENV="SOMETHING"
$> node test.js
TRUE: SOMETHING

Это также работает, когда переменная является пустой строкой (протестировано в новом сеансе bash/окне терминала).

$> node test.js
FALSE
$> export TEST_ENV=""
$> node test.js
TRUE:

Ответ 5

Если вы присваиваете значение с помощью оператора if, вы можете сделать это следующим образом

var thisIsSet = 'asddas';
var newVariable = thisIsSet ||'otherValue'
console.log(newVariable)

Результаты в asddas

Ответ 6

В качестве значения (если оно существует) будет указана строка, как указано в документации:

process.env.test = null;
console.log(process.env.test);
// => 'null'
process.env.test = undefined;
console.log(process.env.test);
// => 'undefined'

и можно вернуть пустую строку (что случилось со мной в процессе CI + сервер GCP),

Я бы создал функцию для очистки значений из process.env:

function clean(value) {
  const FALSY_VALUES = ['', 'null', 'false', 'undefined'];
  if (!value || FALSY_VALUES.includes(value)) {
    return undefined;
  }
  return value;
}

const env = {
  isProduction: proces.env.NODE_ENV === 'production',
  isTest: proces.env.NODE_ENV === 'test',
  isDev: proces.env.NODE_ENV === 'development',
  MYKEY: clean(process.env.MYKEY),
};

// Read an environment variable, which is validated and cleaned
env.MYKEY           // -> 'custom values'

// Some shortcuts (boolean) properties for checking its value:
env.isProduction    // true if NODE_ENV === 'production'
env.isTest          // true if NODE_ENV === 'test'
env.isDev           // true if NODE_ENV === 'development'

Ответ 7

Это хороший способ проверить переменную среды

if (process.env.YOUR_ VARIABLE) {
    // If your variable is exist
}

В противном случае, если вы хотите проверить несколько переменных среды, вы можете проверить это node module.

Узел-envchecker

Ответ 8

let dotenv;

try {
  dotenv = require('dotenv');
  dotenv.config();
}
catch(err) {
  console.log(err);
  // if vars are not available...
}

//... vars should be available at this point