[英]How can I check if an environment variable is set in Node.js?
我想檢查我的Express JS服務器中是否設置了環境變量,並根據是否設置執行不同的操作。
我試過這個:
if(process.env.MYKEY !== 'undefined'){
console.log('It is set!');
} else {
console.log('No set!');
}
我在沒有process.env.MYKEY
的情況下進行測試,但控制台打印“它已設置”。
這在我的 Node.js 項目中運行良好:
if(process.env.MYKEY) {
console.log('It is set!');
}
else {
console.log('No set!');
}
編輯:
請注意,正如@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!');
}
我使用此代碼段來確定是否設置了環境變量
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
屬性返回一個包含用戶環境的對象。 見環境(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'
我將答案中這個尷尬而奇怪的部分從 StackOverflow 移開:它就在這里
為什么不檢查環境變量中是否存在密鑰?
if ('MYKEY' in Object.keys(process.env))
console.log("It is set!");
else
console.log("Not set!");
由於值(如果存在)將是一個字符串,如文檔中所述:
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'
編輯(刪除舊的錯誤答案)
正如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:
我確實練習使用內置的Node.js 斷言庫。
const assert = require('assert');
assert(process.env.MY_VARIABLE, 'MY_VARIABLE is missing');
// or if you need to check some value
assert(process.env.MY_VARIABLE.length > 1, 'MY_VARIABLE should have length greater then 1');
我使用在index.js之上添加此驗證,並使其與代碼要求保持同步。 如果由於某種原因 .env.example 不在代碼中,這種方式也很容易檢查項目需要哪些變量。
如果你用你的 if 語句賦值,你可以這樣做
var thisIsSet = 'asddas';
var newVariable = thisIsSet ||'otherValue'
console.log(newVariable)
結果為 asddas
這是檢查環境變量的好方法
if (process.env.YOUR_ VARIABLE) {
// If your variable is exist
}
否則,如果您想檢查多個環境變量,可以檢查此node module
。
您可以創建.env.example
來存儲應用程序所需的所有環境變量。
在此之后,您可以加載此.env.example
並與.env
進行比較。
這樣,您可以在應用程序啟動時檢查所有必需的環境。
要最小化任務,您可以使用scan-env npm 包,它的作用相同。
const scanEnv = require("scan-env");
const scanResult = scanEnv();
if (!scanResult) {
console.error("Environment variables are missing.");
}
您可以使用 || 輕松解決具有默認值歸屬情況的運算符 env var 不存在:
const mykey = process.env.MYKEY || '1234';
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.