【问题标题】:Access "variable" environment variable using dynamic javascript variable names使用动态 javascript 变量名访问“变量”环境变量
【发布时间】:2019-06-08 22:47:56
【问题描述】:

我有一个问题。在我的主机/云解决方案中,我必须以这种方式使用每个国家/地区的定价环境变量(在他们的“环境变量”中定义)。

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[],但没有任何效果,所有输出“未定义”值

//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

【问题讨论】:

  • 你试过process.env["BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT"]吗?
  • @Xufox 我现在就试试,不,我没有,我尝试了一些规避/复杂的东西......为什么我没有想到呢?如果有效,将更新
  • @Xufox 无效,请查看我的修改
  • 如果您将所有六个变量分组到一个对象中是否有效,例如PRODUCT_PRICES,然后使用process.env.PRODUCT_PRICES["BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT"]?显然process.env 有点……“special”
  • 更新:似乎正在进行 webpack 修复:github.com/webpack/webpack/pull/8721

标签: javascript node.js webpack


【解决方案1】:

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

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

【讨论】:

  • 试过但没用。我在我的问题编辑中添加了它输出的内容
【解决方案2】:
//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'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2021-07-05
    相关资源
    最近更新 更多