2011-11-17 2 views
1

현재 Node.JS를 학습 중입니다.Node.JS HTTP 서버로 작업하는 작업의 흐름

모든 것이 잘 진행되고 있습니다. 업무 흐름에 약간의 어려움이 있습니다.

그래서 특정 포트에서 수신 대기하는 HTTP 서버를 만듭니다. 예 :

var http = require("http"); 

http.createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello World"); 
    response.end(); 
}).listen(8888); 

잘 작동합니다.

Error: EADDRINUSE, Address already in use. 

그래서 나는 내가 죽일 필요가 배운 : 만 문제는 내가 위의 코드를 가지고있는 파일을 편집하고, 나는 다음과 같은 오류가 입력 노드 server.js 다시 노드 프로세스를 시작하려고 할 때이다 노드 프로세스를 ps를 사용하여 변경 사항을 반영 할 수 있고 다시 시작할 수 있습니다.

그러나 이것은 아픔처럼 보입니다. 내가 쓰고있는 서버를 변경할 때마다 노드 프로세스를 죽일 필요가 있습니까?

나는 더 나은 방법이있을 것이라고 확신합니다. 어떤 도움이 필요합니까?

답변

1

개발하는 동안 터미널 창에서 명령 줄에서 노드를 실행하는 경향이 있습니다. 내가 Ctrl + C를 눌러 노드를 죽이는 현재 프로세스를 중단 한 다음 화살표 업을 눌러 프로세스를 다시 시작합니다.

+0

Ctrl-C로하면 ... 처음에는 Ctrl-Z로 노드 서버를 멈추었습니다. 그러나 나는 더 좋은 방법이있을 것이라고 생각해야한다. 감사! @ beny23 – dade

+0

CTRL-Z는 백그라운드에서 일시 중지합니다. 그런 다음 fg 명령으로 재개 할 수 있습니다. 따라서 CTRL-Z는 파일 기술자가 사용 중일 때 메모리에 실제로 보관할 것입니다. 그러면 새로운 프로세스에서 포트를 열 수없는 이유가됩니다. – staackuser2

0

쉬운 방법은 없습니다. 노드 작성자는 핫 리로드 아이디어를 좋아하지 않으므로 이것이 작동하는 방식입니다.

서버를 서버에 설치하면 메인 스크립트에서 .js를 변경하여 해킹 할 수 있으며 파일 변경에 대한 반응으로 수동으로 중지하고 모듈 캐시에서 수동으로 삭제할 수 있습니다 (내가 실수하지 않는다면 require.cache), 그리고 require 다시.

또는 자식 프로세스에서 실행하고 파일을 변경 한 후이를 삭제하고 다시 생성합니다 (즉, 지금 직접하는 작업을 자동으로 수행).

+0

그들은 nodemon, forever, supervisor 등을 보아서 뜨거운 코어를 다시로드하는 것을 좋아한다. – Raynos

0

파일을 편집 할 때 서버가 자동으로 다시 시작되도록 nodemon (video tutorial about it here) 또는 node-supervisor과 같은 것을 사용할 수 있습니다.
수동으로 처리하려면 프로세스 (Ctrl + C)를 중단하고 마지막 명령 (node ​​server.js)을 다시 실행하십시오.

+0

nodemon이 0.6 이상으로 떨어지는 경우 : – Raynos

1

나의 해결책은 간단

npm install dev -g 
node-dev app.js 

같은 노드-DEV는 '노드'와 동일하지만 자동으로 변경됩니다 app.js 매번에게 응용 프로그램 디렉토리 (또는 하위 디렉터리)에있는 모든 파일을 다시 실행합니다. 그것은 정적 파일이 변경되었을 때 재시작한다는 의미이지만 개발 모드에서는 수용 가능해야합니다.

+0

"npm install dev -g"가 Mac에 설치되지 않았다. (치명적인 오류 : 'sys/inotify.h 'file not found). 그래서이 모듈을 설치하는 "npm install node-dev -g"를 사용했습니다 : https://github.com/fgnass/node-dev - Mac에서 매력처럼 작동했습니다. – DerWOK

관련 문제