我正在阅读nodejs的教程,在了解模块的共享状态时,我遇到了一些疑问:
我写了这段代码:
Sparsh.js
var popcorn = require('./popcorn');
popcorn.favPopCorn = 'cheese';
console.log(popcorn.favPopCorn);
Ravi.js
var popcorn = require('./popcorn');
console.log(popcorn.favPopCorn);
app.js
require('./Ravi');
require('./Sparsh');
require('./Ravi');
popcorn.js
module.exports = {
printRate : function() {
console.log('popcorn rate');
},
favPopCorn : ''
};
输出 (空白) 起司 (空白)
根据输出,第一个空白是相当可观的,因为我们没有为favPopCorn分配任何值。但是在我将值分配给Sparsh.js中的favPopCorn后,它应该打印出奶酪'我们再次使用require('。\ Ravi.js');因为它是一个共享的状态。
请帮忙
答案 0 :(得分:1)
解决此问题的常用方法是导出函数:Ravi.js
也共享(好吧,“缓存”是一个更好的词),所以它只加载一次(第一次)。第二次,Node知道它已经加载了,并且第二次没有加载(/执行)它(它不输出空白,它根本不输出)。< / p>
// Ravi.js
var popcorn = require('./popcorn');
module.exports = function() {
console.log(popcorn.favPopCorn);
}
// Sparsh.js
var popcorn = require('./popcorn');
module.exports = function() {
popcorn.favPopCorn = 'cheese';
console.log(popcorn.favPopCorn);
}
// app.js
require('./Ravi')();
require('./Sparsh')();
require('./Ravi')();
答案 1 :(得分:0)
这种思维的一个干净模式是在共享模块中创建一个new
的对象:
//popcorn.js
function popcorn(){
this.printRate = function() {
console.log('popcorn rate');
}
this.favPopCorn = ""
}
module.exports = new popcorn()
现在,当您在其他模块中获取并设置favPopCorn
属性时,您将操作单例。