我有一个文件,其中存储了一些环境变量。 我们称之为generalEnv.js
module.exports = {
CONSTANT_1: process.env.CONSTANT_1,
CONSTANT_2: process.env.CONSTANT_2
};
当应用程序初始化时,我没有将process.env.CONSTANT_1的值放入env变量中,因为如果存在,我必须首先检查某些地方(例如mongodb)。如果mongodb上不存在该值,我将在process.env.CONSTANT_1中添加一个值,并期望该值现在会反映在generalEnv上。
当我尝试访问另一个文件中的CONSTANT_1时。 我们称之为getConstantOne.js
const { CONSTANT_1 } = require('./generalEnv');
module.exports = () => {
// I was expecting that CONSTANT_1 will have a value here now
if(!CONSTANT_1) {
// do something
}
return CONSTANT_1
}
它不反映..如何更新process.env.CONSTANT_1的generalEnv.js的闭包以反映在CONSTANT_1上?
答案 0 :(得分:1)
分配给变量(或数组中对象/元素中的值)时,分配将替换该值,而不是对其进行修改。因此,该值的任何“副本”都不会受到影响,并且保持不变。考虑以下示例:
let a = 0;
let b = a;
a = 1;
b会怎样?答:它的值为0。
要解决此问题,我们需要某种方法来修改值而不是替换它。不幸的是,“原始类型”(字符串/数字/布尔值等)无法在javascript中进行修改。但是,有些类型可以修改,例如对象。您可以通过将变量包装在名为“ env”的对象中来解决此问题。
let env: {
CONSTANT_1: process.env.CONSTANT_1,
CONSTANT_2: process.env.CONSTANT_2
}
modules.exports = { env }
然后进行修改:
env.CONSTANT_1 = "new value"
并访问:
if (!env.CONSTANT_1) { ... }