Как я могу проверить, установлена ли переменная окружения в 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