【问题标题】:Sharing variables between files in node.js在 node.js 中的文件之间共享变量
【发布时间】:2021-01-10 18:08:58
【问题描述】:

我想在 node.js 中进行“变量共享”,但找不到可行的方法。

我的目标是能够从另一个文件更改变量。例如,我的主文件中有a,但在另一个文件(test.js)中执行某些操作后,a 应该在主文件中更改其值。是否有可能完成以及如何完成?

我已经尝试过这段代码,但它似乎不起作用。

main.js

let a = 10;
module.exports.test = a;
console.log(a);
require('./test.js');
console.log(a);

test.js

let b = require('./main.js').test;
b = 15;

【问题讨论】:

    标签: javascript node.js variables


    【解决方案1】:

    此处给出的其他答案建议使用全局变量,但您应避免使用全局变量,原因有很多,我不会在此处详述,但有据可查。

    共享数据的模块化且安全的方法是将其放入对象中(作为对象的属性),然后从一个模块中导出该对象,并将其导入到任何其他想要访问它的模块中。由于导出的对象是真正共享的,因此对该对象的任何属性的任何更新都将立即可供所有其他引用同一对象的人使用。

    shared-data.js

    module.exports = {a: 10};
    

    test.js

    let obj = require('./shared-data.js');
    ++obj.a;
    

    main.js

    let obj = require('./shared-data.js');
    console.log("main1: ", obj.a);
    ++obj.a;
    console.log("main2: ", obj.a);
    
    require('./test.js');
    console.log("main3: ", obj.a);
    

    这将输出:

    main1: 10
    main2: 11
    main3: 12
    

    因为 test.js 正在对 shared-data.js 导出的共享数据进行操作

    【讨论】:

      【解决方案2】:

      您可以只使用全局变量。 See more here

      main.js

      global.a = 10;
      console.log(global.a); // 10
      require('./test.js');
      console.log(global.a); // 15
      

      test.js

      console.log(global.a) // 10
      global.a = 15
      

      【讨论】:

      • 在 nodejs 中不推荐使用全局变量,因为它破坏了模块的各种目标(例如独立测试模块的能力),特别是当数据可以以模块化方式共享时,没有全局变量的缺点。
      【解决方案3】:

      这里的坏主意是当你调用./test时,神奇的变量a会被更新。

      这里可以使用global变量(example

      类似:

      main.js

      global.a = 10
      //call test
      console.log(global.a)) // 15
      

      test.js

      global.a = 15
      

      并且,按照您的想法,调用另一个类并使用这些值,您还可以执行以下操作:

      main.js

      var a = 10
      a = require('./test').a //Note that here you are overwriting your 'a' variable
      console.log(a) //15
      

      test.js

      var b = 15
      module.exports.a = b
      

      因此,在main.js 中分配来自module.exports.aa 值,即分配a = 15

      【讨论】:

      • 在 nodejs 中不推荐使用全局变量,因为它破坏了模块的各种目标(例如独立测试模块的能力),特别是当数据可以以模块化方式共享时,没有全局变量的缺点。
      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2015-08-08
      • 1970-01-01
      相关资源
      最近更新 更多