【问题标题】:Accessing variables from my index.js in another file从我的 index.js 访问另一个文件中的变量
【发布时间】:2019-10-30 17:01:44
【问题描述】:

我正在尝试执行一些代码,就好像它在我的 nodejs 应用程序的 index.js 中一样。 我有以下代码:

index.js

var data = [];
function populateData(){
   for(var i = 0; i < 100; i++){
      data.push(i);
   }
}
populateData();
require('./other.js')();

其他.js

module.exports = function(){
   console.log(data);
}

但是,这告诉我数据未定义。有没有办法像这样读取数据变量? 我试过了

require('./other.js').apply(null);

require('./other.js').apply(this);

但是对我都没有用

【问题讨论】:

  • 为什么不将数据作为参数传递?这比直接使用数据要好得多。
  • 在这种情况下这将是一种更好的方法,但是我更感兴趣的是能够在不同文件的范围内从一个文件运行函数。这个例子是我正在寻找的概念的一个显着简化的演示。

标签: node.js scope


【解决方案1】:

为公共变量使用另一个模块。

  • common.js
module.exports = {
  data: []
}
  • index.js
const common = require('./common');
const other = require('./other');

function populateData(){
   for(var i = 0; i < 100; i++){
      common.data.push(i);
   }
}
populateData();
other.test();

  • other.js
const common = require("./common");

module.exports = {
    test: function(){
       console.log(common.data);
    }
}

【讨论】:

  • 虽然这是一个很好的解决方案(我计划在未来的项目中实施),但我目前正在开展一个需要大量返工才能以这种方式运行的项目。有没有办法直接运行 index.js 作用域下的 other.js 函数?
  • 那么,你可以简单地使用像global.data = xxxstackabuse.com/using-global-variables-in-node-js这样的全局变量
  • 啊,谢谢,这将适用于我正在尝试做的事情,但是,有没有办法简单地更改函数正在执行的文件范围?
  • 在当前的模块结构上,index.js 需要other.js,并且other.js 需要index.js 作为要求。我认为这不是一个好方法,所以你应该将populateData() 移动到带有data 的单个模块,然后从一侧(other.js)调用它,比如populateData(); console.log(data);,或者当模块调用一次populateData()已初始化。
【解决方案2】:

您可以像这样将数据传递给文件

index.js

var data = [];
function populateData() {
  for (var i = 0; i < 100; i++) {
  data.push(i);
  }
}
populateData();
require('./other.js')(data);

其他.js

module.exports = function(data) {
  console.log(data);
};

【讨论】:

  • 我需要一种更通用的方法来访问任何变量。也许有没有办法让我将所有当前变量作为参数传递,而不必手动将它们中的每一个都放入一个对象中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2020-02-09
  • 1970-01-01
  • 2014-09-20
  • 2012-06-29
相关资源
最近更新 更多