我想检查我的Node.js Express服务器中是否设置了环境变量,并根据它是否已设置执行不同的操作。
我试过这个:
if(process.env.MYKEY !== 'undefined'){ console.log('It is set!'); }
else { console.log('No set!'); }
我在没有process.env.MYKEY
的情况下进行测试,但控制台打印出“已设置”。
答案 0 :(得分:23)
这在我的Node.js项目中运行良好:
{{1}}
答案 1 :(得分:2)
为什么不检查键是否存在于环境变量中?
if ('MYKEY' in Object.keys(process.env))
console.log("It is set!");
else
console.log("Not set!");
答案 2 :(得分:2)
我使用此代码片段来确定是否设置了环境变量
if ('DEBUG' in process.env) {
console.log("Env var is set:", process.env.DEBUG)
} else {
console.log("Env var IS NOT SET")
}
如NodeJS 8 docs中所述:
process.env
属性返回一个包含用户环境的对象。参见environ(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's 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 简单明了。
答案 3 :(得分:1)
编辑(已删除旧的错误答案)
正如maxkoryukov所说,应该是:
# 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:
答案 4 :(得分:0)
这是检查环境变量的好方法
if (process.env.YOUR_ VARIABLE) {
// If your variable is exist
}
否则,如果您要检查多个环境变量,则可以将node module
检出。
答案 5 :(得分:0)
如果要通过if语句分配值,则可以这样做
var thisIsSet = 'asddas';
var newVariable = thisIsSet ||'otherValue'
console.log(newVariable)
产生asddas
答案 6 :(得分:0)
因为值(如果存在)将是一个字符串,如documentation中所述:
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 :(得分:-3)
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