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 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/을 열어야 했습니다.프로세스를 찾을 수 있는 또 다른 방법이 여기에 제공됩니다.
이 오류의 이유
지정한 포트에서 다른 프로세스가 이미 실행되고 있습니다.
간편하고 빠른 솔루션
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를 사용하는 경우 다음을 수행합니다.
실행 > 디버그
실행 중인 프로세스를 마우스 오른쪽 버튼으로 클릭하고 종료를 클릭합니다.
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를 사용했기 때문).
- 목록 항목 창 파워셸 열기
- 형자
ps
수 . - 프로세스 이름이 지정된 노드를 찾고 ID를 기록합니다.
- 형자
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
'programing' 카테고리의 다른 글
XMLHttpRequest를 통해 파일을 멀티파트로 보냅니다. (0) | 2023.08.24 |
---|---|
노드 모듈에서 폰트 어썸 아이콘을 사용하는 방법 (0) | 2023.08.24 |
폴더를 라벨로 만들기 전에 폴더가 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.24 |
추가 방지 ▁prevent추가ed▁content▁adding 추가 방지 ▁prevent추가ed▁content▁adding 추가 방지 ▁prevent추가ed▁content▁addingENTER - Chrome에서 (0) | 2023.08.24 |
스프링 부트 + 스프링 보안 + 계층적 역할 (0) | 2023.08.24 |