How can I check if an environment variable is set in Node.js?
Solution 1:
This is working fine in my Node.js project:
if(process.env.MYKEY) {
console.log('It is set!');
}
else {
console.log('No set!');
}
EDIT:
Note that, As @Salketer mentioned, depends on the needs, falsy value will be considered as false
in snippet above. In case a falsy value is considered as valid value. Use hasOwnProperty
or checking the value once again inside the block.
> x = {a: ''}
{ a: '' }
> x.hasOwnProperty('a')
true
Or, feel free to use the in operator
if ("MYKEY" in process.env) {
console.log('It is set!');
} else {
console.log('No set!');
}
Solution 2:
I use this snippet to find out whether the environment variable is set
if ('DEBUG' in process.env) {
console.log("Env var is set:", process.env.DEBUG)
} else {
console.log("Env var IS NOT SET")
}
Theoretical Notes
As mentioned in the NodeJS 8 docs:
The
process.env
property returns an object containing the user environment. See environ(7).[...]
Assigning a property on
process.env
will implicitly convert the value to a string.process.env.test = null console.log(process.env.test); // => 'null' process.env.test = undefined; console.log(process.env.test); // => 'undefined'
Though, when the variable isn't set in the environment, the appropriate key is not present in the process.env
object at all and the corresponding property of the process.env
is undefined
.
Here is another one example (be aware of quotes used in the example):
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'
A side-note about the code style
I moved this awkward and weird part of the answer away from StackOverflow: it is here
Solution 3:
Why not check whether the key exists in the environment variables?
if ('MYKEY' in Object.keys(process.env))
console.log("It is set!");
else
console.log("Not set!");