如何检查Node.js中是否设置了环境变量?

时间:2015-05-05 07:57:05

标签: javascript node.js environment-variables

我想检查我的Node.js Express服务器中是否设置了环境变量,并根据它是否已设置执行不同的操作。

我试过这个:

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

我在没有process.env.MYKEY的情况下进行测试,但控制台打印出“已设置”。

8 个答案:

答案 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检出。

node-envchecker

答案 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