2014-03-30 4 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 '일 때 모든 개인 변수는 어떻게됩니까?

내가 테스트 할 REPL에서이 모듈을 사용하고 있지만, 예를 들어 사용량이 바로 node.js 문서에서

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

편집 :에 http://nodejs.org/api/modules.html

변수 지역 모듈은 함수로 래핑 된 것처럼 private이됩니다.

그래서 변수는 기본적으로 모듈에 의해 표현되는 클 루스 안에 만 존재합니다.

+0

하지만'start' 함수에서 설정하고 있습니다. 그것이 모듈 클로저에 있기 때문에'stop' 함수는 호출 될 때 새로운 값을 가져 오지 않아야합니까? – Umair

+0

그것은 그것을 데리러해야합니다. 너는 뭔가 잘못하고있다. "얼마 후"는 무엇을 의미합니까? – mihai

+0

나는 그 코드를 REPL에서 실행하고 있기 때문에, "약간의 시간이 지나면"문자 그대로이다 : – Umair

관련 문제