对通过'获得的数据进行修改需要'没有实施

时间:2016-01-21 20:04:32

标签: javascript node.js

app.js

var temp = require('./data');

temp.setId(1);
temp.setName('Tushar', 'Mudgal');
temp.setCity('New Delhi');
temp.setPh(9999421591);

var temp2 = require('./data');

// temp2.setId(2);
// temp2.setName('Saurabh', 'Mudgal');
// temp2.setCity('New Delhi');
// temp2.setPh(9999425085);

console.log(temp.getInfo());

console.log(temp2.getInfo());

当我通过node执行上面的脚本时,我收到了这个输出:

tourist@linux:~/Desktop/backend/modules2/customer$ node app.js 
{ name: 'Tushar Mudgal',
  cid: 1,
  ad_city: 'New Delhi',
  phno: 9999421591 }
{ name: 'Tushar Mudgal',
  cid: 1,
  ad_city: 'New Delhi',
  phno: 9999421591 }

我想知道为什么temp2包含与temp相同的数据。

data文件夹由index.js文件组成,其中包含app.js文件中执行的所有函数的定义。

1 个答案:

答案 0 :(得分:2)

Node.js缓存模块,因此require(...)与readFile(...)相同:一旦Node加载到模块中,它就会缓存模块export,simple简单地指回任何后续require(...)调用同一个东西。

所以:

// load module into cache and return its exports.
// the variable temp is an _alias_ for these exports.
var temp = require('./data');

// modify temp, and because it's just an alias, that means
// modify the data.js exports that you told Node to require in.
modify(temp);

// set up a new alias for the data.js module. Node
// points you to its cache, so any changes you made earlier
// are still in effect.
var temp2 = require('./data');

底线:如果您需要加载文件数据,请不要使用require。只有在需要加载真实模块时才使用它。