2017-07-02 109 views
0

我通過nodejs教程去的共享狀態,並同時瞭解模塊的共享狀態的價值,我來通過幾個疑點:的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 : '' 
}; 

輸出 (空白) 奶酪 (空白)

按輸出的firstblank是相當大的,因爲我們並沒有分配到任何favPopCorn價值。但是當我在Sparsh.js.中將值賦給favPopCorn後,它應該打印'cheese',而我們再次使用require('。\ Ravi.js');因爲它是一個共享狀態。

請幫

+0

可變爆米花在ravi.js中重新初始化,每次需要ravi.js – binariedMe

+0

因此,根據變量範圍輸出是正確的。 – binariedMe

+0

根據教程,它是一個共享的狀態,所以當我們在Sparsh.js中更改它時,favPopCorn的值應該反映在Ravi.js中 – sparsh610

回答

1

Ravi.js共享(當然,「緩存」是一個更好的詞),所以它的加載只有一次(第一次)。第二次,Node知道它已經被加載並且不會再次加載(/執行)它(它不會輸出空白,它不會輸出,全部爲)。

的常用方法來解決是導出功能:

// 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')(); 
+0

是的,但你能否告訴我方式,以便它能夠反映修改後的值。 – sparsh610

+0

@ sparsh610請參閱我的編輯方法 – robertklep

0

這類想到一個乾淨的模式是共享模塊中創建new對象:

//popcorn.js 

function popcorn(){ 
    this.printRate = function() { 
     console.log('popcorn rate'); 
    } 
    this.favPopCorn = "" 
} 

module.exports = new popcorn() 

現在,當你在其他模塊中得到並設置favPopCorn屬性時,你將會操縱一個單例。