使用动态javascript变量名称访问“变量”环境变量

时间:2019-01-14 22:28:53

标签: javascript node.js webpack

我有一个问题。在我的Host / cloud解决方案中,我必须按照“在其“环境变量”中定义的方式”使用每个国家/地区的定价环境变量。

BASIC_PRICE_FR_PRODUCT = "50";
COMPLEX_PRICE_FR_PRODUCT = 100;

BASIC_PRICE_UK_PRODUCT = "37";
COMPLEX_PRICE_UK_PRODUCT = "200";

BASIC_PRICE_ES_PRODUCT = "75";
COMPLEX_PRICE_ES_PRODUCT = "300";

我可以访问使用process.env.XXX的用户,例如process.env.BASIC_PRICE_FR

您看到这些环境变量取决于国家/地区,因为一个国家/地区与另一个国家之间的价格不同。

在我们的node.js应用程序中,挑战在于,执行一个函数时,它会自我了解国家/地区,因此,我们可以(必须)使用“当前”国家/地区和当前country_iso_code(“ fr”代表例如),与此同时,我们必须使用与该国家/地区匹配的定价。

在阅读了有关“动态变量名称”的一些文章之后,我尝试了如下所示的eval,global []和window [],但是没有任何作用,并且所有输出都为“ undefined”值

//note: iso_code_3166_we_can_use is something passed to the function by the final user or by some other lambda in the function context.
const current_country_iso_code_uppercase = iso_code_3166_we_can_use;
const basicPrice   = parseInt( "process.env.BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT")
console.log(basicPrice)//bug here as outputs "undefined"

编辑

使用process.env ['xxx']的建议无效,因此我在此处添加了结果

console.log(process.env.BASIC_PRICE_FR_PRODUCT);//outputs 50
console.log('BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT' );//just to be sure :): outputs BASIC_PRICE_FR_PRODUCT
console.log( process.env['BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT'] );// DOES NOT WORK, outputs undefined

2 个答案:

答案 0 :(得分:4)

使用[]动态访问对象的属性:

var country = 'FR'
var price   = process.env['BASIC_PRICE_' + country + '_PRODUCT']

答案 1 :(得分:-1)

//Create an empty dictionary,
var process_env_dict = {};
process_env_dict['env'] = process.env;

//then you can access it with the below statement as you expected

var result = JSON.parse(JSON.stringify(process_env_dict))['env']['BASIC_PRICE_' + country + '_PRODUCT'];