[node.js] ExpressJS-처리되지 않은 오류 이벤트 발생

다음 명령을 사용하여 expressjs 응용 프로그램을 만들었습니다.

express -e folderName
npm install ejs --save
npm install

와 함께 응용 프로그램을 실행할 때 node app.js다음 오류가 발생합니다.

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: listen EADDRINUSE
    at errnoException (net.js:884:11)
    at Server._listen2 (net.js:1022:14)
    at listen (net.js:1044:10)
    at Server.listen (net.js:1110:5)
    at Object.<anonymous> (folderName/app.js:33:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

고치는 방법?



답변

다른 서버를 실행하여 8080과 같은 포트를 사용했습니다.

node app다른 쉘에서 실행했을 수도 있습니다 . 닫고 다시 실행하십시오.

포트 번호를 확인할 수 있습니다. 사용 가능 여부

netstat -tulnp | grep <port no>

또는 lsof 를 사용할 수 있습니다 .

lsof -i :<port no>


답변

익스프레스 앱을 실행하면 비슷한 오류가 발생합니다. 이 경우에도 똑같이 따라야합니다. 터미널에서 실행 중인지 확인해야합니다. 프로세스를 찾아서 종료하려면 다음 단계를 수행하십시오.

  • PS AUX | 그렙 노드
  • 프로세스 ID를 찾으십시오 (왼쪽에서 두 번째).
  • -9 PRCOCESS_ID 죽이기

또는

단일 명령을 사용하여 실행중인 모든 노드 프로세스를 닫으십시오.

ps aux | awk '/node/{print $2}' | xargs kill -9


답변

인스턴스가 여전히 실행 중일 수 있습니다. 문제가 해결됩니다.

killall node

업데이트 :이 명령은 Linux / Ubuntu 및 Mac에서만 작동합니다.


답변

Linux를 사용하는 경우 Nodejs가 루트로 실행되지 않는 경우에도이 문제가 발생할 수 있습니다.

이것에서 변경 :

nodejs /path/to/script.js

이에:

sudo nodejs /path/to/script.js

방금 나에게 일어 났으며 여기에 다른 제안은 없습니다. 운 좋게도 루트로 실행할 때 스크립트가 다른 날에 작동하고 있음을 기억했습니다. 이것이 누군가를 돕기를 바랍니다!

면책 조항 : 이것은 아마도 프로덕션 환경에 가장 적합한 솔루션은 아닙니다. 루트로 서비스를 시작하면 서버 / 애플리케이션에 보안 허점이 생길 수 있습니다. 제 경우에는 로컬 서비스를위한 솔루션 이었지만 다른 사람들이 원인을 찾아 내기 위해 더 많은 시간을 보내도록 권장하고 있습니다.


답변

스크립트를 실행하는 데 사용중인 포트가 이미 사용 중이기 때문입니다. 해당 게시물을 사용하는 다른 모든 노드를 중지해야합니다. 이를 위해 다음을 통해 모든 노드를 확인할 수 있습니다

ps -e

또는 노드 프로세스의 경우에만 사용 ps -ef | grep node
ID가있는 모든 노드 프로세스의 목록을 제공합니다

모든 노드 프로세스를 종료하려면

sudo killall -9 node

또는 특정 ID sudo kill -9 id


답변

포트를 변경하여 버그를 수정했습니다.

app.set('port', process.env.PORT || 3000);<br>

다음으로 변경되었습니다.

app.set('port', process.env.PORT || 8080);<br>


답변

사용하려는 포트 노드가 다른 프로그램에서 이미 사용될 수 있습니다. 내 경우 에는 최근에 설치 한 ntop 입니다. 그것을 깨닫기 위해 브라우저에서 http : // localhost : 3000 / 을 열어야 했습니다. 프로세스를 찾는 또 다른 방법은 여기에 있습니다 .