programing

ExpressJS - 로더 처리되지 않은 오류 이벤트

closeapi 2023. 8. 24. 22:05
반응형

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 -i :<port no>

가끔 고속 앱을 실행할 때도 비슷한 오류가 발생합니다.우리는 그 경우에도 똑같이 따라야 합니다.우리는 그것이 어느 터미널에서 작동하는지 확인해야 합니다.프로세스를 찾아서 종료하려면 다음 단계를 수행합니다.

  • ps aux | grep 노드
  • 프로세스 ID를 찾습니다(왼쪽에서 두 번째).
  • 킬 -9 PROCESS_ID

OR

실행 중인 모든 노드 프로세스를 닫으려면 단일 명령을 사용합니다.

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

노드 프로세스 전용 ORps -ef | grep nodeID가 있는 모든 노드 프로세스의 목록이 표시됩니다.

모든 노드 프로세스를 종료합니다.

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/열어야 했습니다.프로세스를 찾을 수 있는 또 다른 방법이 여기에 제공됩니다.

이 오류의 이유

지정한 포트에서 다른 프로세스가 이미 실행되고 있습니다.

간편하고 빠른 솔루션

Linux OS에서는 예를 들어 3000을 포트로 지정했습니다.

  • 터널을열실다니합행을 합니다.lsof -i :3000포트 3000에서 이미 실행 중인 프로세스가 있으면 콘솔에 이 인쇄가 표시됩니다.

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)

  • 출력에서 PID(프로세스 ID) 복사

  • 려달을 합니다.sudo kill -9 16615뒤에 ) (PID는 -9입니다)

  • 서버를 다시 시작합니다.

다른 터미널 창에 있거나 다른 포트에서 실행 중인 다른 노드 서버를 닫습니다.그러면 문제가 해결될 겁니다.

하려면 동한포번트사호면다려입음다니력합을하용를을 합니다.kill %터미널에서 현재 백그라운드 프로세스를 종료하고 추가 사용을 위해 포트를 개방합니다.

이는 파일이 지금 실행 중임을 의미합니다.아래 코드를 입력하고 다시 시도하십시오.

sudo pkill node

실제로 Ctrl+C 키는 노드 프로세스에서 사용하는 포트를 해제하지 않습니다.그래서 이 오류가 있습니다.이 문제에 대한 해결 방법은 server.js의 다음 코드 스니펫을 사용하는 것이었습니다.

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

이것은 저에게 효과가 있었습니다.

또한 NodeJS의 정상 종료에서 언급된 다른 솔루션도 확인할 수 있습니다.

3000에서 수신 중인 모든 노드 인스턴스 및 기타 서비스(익스프레스 스켈레톤 설치에서 사용하는 기본값)를 제거하려고 했지만 실패했다면 환경에서 '포트'를 예기치 않은 것으로 정의하지 않았는지 확인해야 합니다.그렇지 않으면 동일한 오류가 발생할 수 있습니다.익스프레스 스켈레톤의 app.js 파일에 15행이 표시됩니다.

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

이 문제를 해결하려면 실행 중인 서버를 종료하거나 닫습니다.Eclipse IDE를 사용하는 경우 다음을 수행합니다.

실행 > 디버그

enter image description here

실행 중인 프로세스를 마우스 오른쪽 버튼으로 클릭하고 종료를 클릭합니다.

events.js:183 던지기; // 처리되지 않은 '오류' 이벤트

저도 같은 종류의 문제를 겪고 여러 방법을 시도했지만 결국 이것을 얻었습니다. 이것은 잘 작동합니다.

npm install ws@3.3.2 --save-dev --save-exact

자세한 내용은 이 링크를 참조하십시오. https://github.com/ionic-team/ionic-cli/issues/2922

나는 오늘 같은 문제에 부딪혔고 포트가 사용되지 않았습니다.다음과 같은 접근 방식이 도움이 되었습니다.

rm -rf node_modules && npm cache clean && npm install
npm start

창:

cmd 1 : ls of -i : <port no>

프로세스 ID를 제공합니다.

cmd 2 : kill -9 <process id>

다 했어요.

내 경우엔 도망쳐야 했어요vagrant reload뿐만 아니라.가상 시스템에서 Express 앱을 실행하는 노드 프로세스가 없음에도 부랑 상자를 다시 로드할 때까지 이 오류가 계속 발생했습니다.

해당 포트를 사용하는 서비스를 중지합니다.

sudo service NAMEOFSERVICE stop

저의 경우, 전화하는 것을 잊어서 문제가 발생했습니다.next()expressjs 'use' 서드호서에출메서▁express.

현재 미들웨어가 요청-응답 사이클을 종료하지 않으면 다음 미들웨어에 제어 권한을 전달하기 위해 next()를 호출해야 합니다. 그렇지 않으면 요청이 보류된 상태로 유지됩니다.

http://expressjs.com/guide/using-middleware.html

이것은 저에게 효과가 있었습니다.

http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html

프로젝트 속성에서 포트 번호를 변경하기만 하면 됩니다.

Gruntfile.js에서 포트를 변경하고 다시 실행할 수도 있습니다.

동일한 프로세스를 여러 번 실행했지만 포트 8000에서 실행 중인 다른 프로세스를 찾을 수 없었기 때문에 포트 8000에서 두 번 실행하려고 했습니다.

이전:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
app.listen(port, () => {
  console.log("We are live on " + port);
});

이후:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});

저도 같은 문제가 있었고 이전에 CTRL+C로 취소했던 nodejs 프로세스가 여전히 실행 중이라는 것을 알게 되었습니다.Windows 10의 문제는 Ctrl + C가 JS 노드를 Gracefully로 죽이지 않는다는 것입니다.작업 관리자를 열고 프로세스를 수동으로 종료했습니다.GitHub에서 제공되는 솔루션은 저에게 효과가 없었습니다.

창을 사용하는 경우 node.js에 대한 작업 관리자의 프로세스를 종료할 수 있습니다.

어떤 대답도 제게는 통하지 않았습니다.

컴퓨터를 다시 시작하면 서버를 실행할 수 있었습니다.


shutdown now -r


sudo shutdown now -r

->포트 8080에서 실행 중인 항목 또는 확인할 포트를 확인합니다.

lsof -i @localhost:8080

실행 중인 것이 있으면 닫거나 일부 킬 명령을 사용하여 닫을 수 있습니다.

Visual Studio Code에서 터미널을 확인하기만 하면 됩니다. 노드 앱을 실행하고 노트북을 최대 절전 모드로 전환한 다음 다음날 아침 노트북을 다시 소프트웨어 개발로 전환합니다.그런 다음 다시 nodedemon app.js 명령을 실행합니다. 첫 번째는 밤부터 실행되고 두 번째는 최신 명령을 실행하고 있었기 때문에 두 개의 명령 프롬프트가 동일한 포트를 수신하고 있기 때문에 이 문제가 발생합니다.단순 하나의 터미널 또는 모든 터미널을 닫은 후 노드 app.js 또는 nodedemon app.js를 실행합니다.

수신 중인 포트는 이미 다른 프로세스에서 수신 중입니다.

이 오류가 발생했을 때 Windows PowerShell을 사용하여 프로세스를 종료했습니다(Windows를 사용했기 때문).

  1. 목록 항목 창 파워셸 열기
  2. 형자ps 수 .
  3. 프로세스 이름이 지정된 노드를 찾고 ID를 기록합니다.
  4. 형자Stop-process <Id> 생각합니다.

만약 그것이 mac에 있다면, 그것은 x86_64-apple-darwin13.4.0의 IP에 관한 것입니다.오류가 발생하면 x86_64-apple-darwin13.4.0과 관련된 내용이 됩니다. 추가

127.0.0.1 x86_64-애플-듀얼 13.4.0

/etc/filename 파일로 이동합니다.그러면 문제가 사라집니다.

언급URL : https://stackoverflow.com/questions/16827987/expressjs-throw-er-unhandled-error-event

반응형