2013-07-31 1 views
2

노드 검사기를 실행중인 node.js 프로그램에 연결했습니다. 하지만 콘솔을 통해 명령을 내리고 싶습니다. 반드시 브레이크 포인트가 아니어야합니다. 예를 들어, server.js 프로그램에 전역 변수와 함수가 있습니다. 예를 들어 :노드 관리자를 통해 콘솔 명령을 실행 하시겠습니까?

var express = require('express'); 
var app = express(); 

function test() { 
    console.log('yo'); 
} 

app.listen(3000); 

지금 노드 관리자에서 나는 콘솔에 가서 내가 ') (테스트'를 입력하고 반환 전역 변수와 같은 일이 내가 '응용 프로그램'을 입력, "ReferenceError가 테스트가 정의되어 있지 않습니다" 그것이 정의되지 않았다는 것을 알려줍니다. 이걸 어떻게 작동시키는 지 아는가? 난 그냥 내 노드 프로그램을 실행하고 다음 명령 줄 인터페이스를 통해 명령을 발급 싶습니다.

답변

1

예상대로 작동하지 않는 이유는 모든 변수와 함수가 모듈 (응용 프로그램)에 로컬이며 전역 컨텍스트에서 액세스 할 수 없기 때문입니다.

당신이 (중단 점에서 중지하지 않을 경우 콘솔 포함) 어디에서든 액세스 할 경우이 전역에 저장할 수 있습니다

:

var express = require('express'); 
var app = express(); 

function test() { 
    console.log('yo'); 
} 

app.listen(3000); 

global.test = test; 
+0

노드가 글로벌 컨텍스트에서 노드를 저장하지 않습니까? 브라우저의 창 개체를 좋아합니까? – foreyez

+1

아니요, 그들은 클로저에 저장됩니다. 노드 인스펙터에서 소스 코드를 보면 코드가'(function (...) {/ * your code here * /});'블록으로 둘러싸인 것을 볼 수 있습니다. –

+1

그리고 전역 변수 안에 모든 변수를 넣지 않고 명령 행을 통해 클로저 안에 들어가는 방법은 없습니다. – foreyez

3

@foreyez을

귀하의 질문은 영감

https://github.com/go-oleg/debug-live

01 : 내게는 실행이 중단 점을 설정하거나 변수 global을 할 필요없이 응용 프로그램을 Node.js를 (명령 줄을 통해)를 디버그 수 있도록하는 NPM 모듈을 만들려면

희망이 도움이됩니다.

+0

굉장 도구, 고마워. 'console.log ('yo');'는 문자열을 출력하지 않습니다. 어쩌면 당신이 이것을 향상시킬 수 있습니다. 그리고 위아래 키를 누르면 명령 기록에서 탐색하지 않습니다. 구문 강조도 좋습니다! – ideaboxer

관련 문제