2014-03-30 41 views
1

看起來好像我的私有變量在節點模塊中被「重置」。例如。我有一個模塊節點模塊。私有變量被重置

var exec = require('child_process').exec;  

var process; 

module.exports.start = function() { 
    if (!process) { 
     process = exec('Some process'); 
    } 
}; 

module.exports.stop = function() { 
    if (process) { 
     process.kill(); 
    } 
}; 

,我面對的是,如果我叫startstop功能process變量是未定義的問題在下面的代碼。

很明顯,解決這個問題的方法是定義一個對象/類並將其暴露在模塊中。

但現在我很想知道模塊如何在節點中工作。當一個模塊爲require'd時,所有私有變量會發生什麼?

編輯

我使用這個模塊從REPL測試,但用法的例子也只是

var my_module = require('./my_module'); 

// the child process starts fine 
my_module.start(); 

// after some time 

// but does not end 
my_module.stop(); 
+1

顯示使用此模塊的代碼... – Justin808

+0

也許'exec'只是*不*返回'undefined'? – Bergi

+0

已經顯示了一個例子。 @Bergi no exec返回一個ChildProcess對象。 – Umair

回答

1

node.js文檔:http://nodejs.org/api/modules.html

的局部變量模塊將是私有的,就像模塊被封裝在一個函數中一樣。

所以你的變量基本上只存在於由模塊表示的clouse中。

+0

但我將它設置在'start'函數中。既然它在模塊閉包中,那麼'stop'函數在被調用時不會收到它的新值? – Umair

+0

它應該撿起來。你正在做一些其他的錯誤。 「一段時間後」意味着什麼? – mihai

+0

我正在REPL中運行該代碼,因此在這種情況下,「在一段時間之後」是文字:) – Umair