ExpressJS-未処理のエラーイベントをスローする


180

次のコマンドを使用して、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)

それを修正するには?


30
EADDRINUSEは、ポートがすでに使用されていることを意味します。app.jsのウェブサーバーがリッスンするポートを変更するか、不要な場合は現在そのポートを使用しているポートを強制終了します。
go-oleg 2013年

ポートを閉じることが解決しない場合は、こちらをお試しください> stackoverflow.com/a/52441297/6665568
Natesh bhat

回答:


400

別のサーバーを実行して、8080などの同じポートを使用しました。

たぶん、あなたが実行していたnode app他のシェルで、それを閉じて、もう一度実行してください。

ポート番号を確認できます。利用可能または使用していない

netstat -tulnp | grep <port no>

または、lsofを使用できます。

lsof -i :<port no>

4
私はWebStormを使用してこれに遭遇しました。同じワークスペースで2つのデバッグセッションを開いています。どー!
Nick Curran 2013年

53
このような一般的なエラーは、より適切なエラーメッセージに値します。
タムリン2014

これは、node-activedirectoryを使用しているときに起こりました。baseDNにサブドメインがありませんでした。baseDN: 'ldap:// dc = subdomain、dc = domain、dc = com'
マーク

rails server...のインスタンスを実行していました:|
Sheharyar 14

1
Mac High Sierraの場合:lsof -nP -i4TCP:$ PORT | grep LISTEN
Roee

61

エクスプレスアプリを実行すると、同様のエラーが発生します。その場合も同じようにしなければなりません。端末で実行されているかどうかを確認する必要があります。プロセスを見つけて強制終了するには、次の手順に従います。

  • ps aux | grepノード
  • プロセスIDを見つけます(左から2番目):
  • キル-9 PRCOCESS_ID

または

単一のコマンドを使用して、実行中のすべてのノードプロセスを閉じます。

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

5
ps aux | grep node | awk '{print $2}' | xargs kill -9
Daniel

killall -r node(Linuxの場合)
jt3k

25

インスタンスはおそらくまだ実行中です。これで修正されます。

killall node

更新:このコマンドはLinux / UbuntuとMacでのみ機能します。


1
killall -9ノード
Pankaj Shinde

16

Linuxを使用している場合、この問題はNodejsがrootとして実行されていない場合にも発生する可能性があります。

これからの変更:

nodejs /path/to/script.js

これに:

sudo nodejs /path/to/script.js

ちょうど私に起こりました、そして、ここの他の提案のどれもそれを修正しませんでした。幸いなことに、先日rootで実行したときにスクリプトが機能していたことを思い出しました。これが誰かを助けることを願っています!

免責事項:これは、おそらく本番環境に最適なソリューションではありません。rootとしてサービスを開始すると、サーバー/アプリケーションにセキュリティホールが生じる可能性があります。私の場合、これはローカルサービスの解決策でしたが、原因を特定するためにさらに時間を費やすことを他の人に勧めます。


1
この問題を解決するためにrootとしてスクリプトを実行するのは非常に危険に聞こえます。1024未満のポートにバインドしようとしているのでない限り、ノードをルートとして実行する必要はありません。あなたの場合は、ポート80または443にバインドしようとしていると思います。Nginxを使用して、これらのポートから8000などのより高いポートのnodejsにトラフィックを転送することをお勧めします。
バリキン、2015

1
ご指摘いただきありがとうございます。私が使用していた特定のスクリプトがこれらのポートのいずれかで呼び出されたとは思わない。確かに、Nodeをhttpサーバーとして使用していない。おそらく、それは私が使用したモジュールの1つで、追加のアクセス許可が必要でしたか?しばらくお詫び申し上げます。どのスクリプトがこの解決策を要求したのかさえわかりません。本番環境でこれを試みることに関する免責事項を追加します。
CauselessEffect

12

これは、スクリプトの実行に使用しているポートがすでに使用されているためです。その投稿を使用している他のすべてのノードを停止する必要があります。そのため、次の方法ですべてのノードを確認できます

ps -e

または、ノードプロセスのみで使用します。ps -ef | grep node これにより、IDを持つすべてのノードプロセスのリストが表示されます。

すべてのノードプロセスを終了する

sudo killall -9 node

または特定のID sudo kill -9 id


あなたは私の夜を救った!
Mujtaba Mahmood 2018

8

あったポートを変更してバグを修正しました

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

に変更されました:

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

1
これは、受け入れられた答えがマークによって与えられた答えに言うことを適用することとどのように異なりますか?
EWit


2

同じポート番号を使用する場合kill %は、ターミナルに入力します。これにより、現在のバックグラウンドプロセスが強制終了され、ポートを解放してさらに使用できるようになります。



1

他のターミナルウィンドウや別のポートで実行されている場合でも、実行中の他のノードサーバーをすべて閉じます。これで問題が解決します。


1

3000(高速スケルトンセットアップで使用されるデフォルト)でリッスンしているすべてのノードインスタンスと他のサービスを無効にしようとした場合、環境が「ポート」を予期しないものとして定義していないことを確認してください。そうしないと、同じエラーが発生する可能性があります。Expressスケルトンのapp.jsファイルで、15行目に気づくでしょう。

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

1

これを修正するには、実行中のサーバーを終了するか閉じます。Eclipse IDEを使用している場合は、これに従ってください。

実行>デバッグ

ここに画像の説明を入力してください

実行中のプロセスを右クリックし、[ 終了 ]をクリックします。



1

実際には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のグレースフルシャットダウンで言及されている他のソリューションを確認することもできます


1

このエラーの理由

指定したポートで他のプロセスがすでに実行されています

シンプルで迅速なソリューション

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(-9の後にPIDを置く必要があります)

  • サーバーを再起動します

0

私の場合、私vagrant reloadも走らなければなりませんでした。仮想マシンでExpressアプリを実行しているノードプロセスがない場合でも、バガントボックスをリロードするまでこのエラーが発生していました。


0

そのポートを使用しているサービスを停止します。

sudo service NAMEOFSERVICE stop

0

私の場合、問題はnext()expressjsの「use」メソッド呼び出しを呼び出すのを忘れたことが原因でした。

現在のミドルウェアが要求と応答のサイクルを終了しない場合は、次のミドルウェアに制御を渡すためにnext()を呼び出す必要があります。そうしないと、要求がハングしたままになります。

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




0

同じプロセスを複数回強制終了し、他にポート8000​​で実行されているものを見つけることができなかった後、ポート8000​​で2回実行しようとしていることに気付きました。

前:

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, {});

0

同じ問題があり、以前にCTRL + Cでキャンセルしたnodejsプロセスがまだ実行中であることがわかりました。Windows 10の問題は、Ctrl + Cで nodejsが正常に終了しないことです。タスクマネージャーを開き、プロセスを手動で強制終了しました。GitHubで提供されているソリューションが機能しませんでした。


0

Windowsを使用している場合は、node.jsのタスクマネージャーからプロセスを終了できます


0

答えはどれもうまくいきませんでした。

コンピュータを再起動すると、サーバーを稼働させることができました。

マック
shutdown now -r

Linux
sudo shutdown now -r


0

->ポート8080で実行されているもの、またはポートuで確認したいものを確認します

lsof -i @localhost:8080

何かが実行されている場合、それを閉じるか、いくつかのkillコマンドを使用して閉じることができます


0

Visual Studio Codeでターミナルを確認するだけです。ノードアプリを実行していて、ラップトップを休止状態にしていたので、翌朝、ラップトップをソフトウェア開発に戻します。もう一度コマンドを実行すると、nodemon app.jsが最初から実行され、2番目は最新のコマンドを実行していたため、2つのコマンドプロンプトが同じポートをリッスンしているため、この問題が発生します。単純に1つの端末またはすべての端末を閉じてから、ノードapp.jsまたはnodemon app.jsを実行します


0

待機しているポートは、すでに別のプロセスによって待機されています。

このエラーに直面したとき、Windows PowerShellを使用してプロセスを強制終了しました(Windowsを使用したため)。

  1. リスト項目Windows PowerShellを開く
  2. 入力するpsと、プロセスのリストを取得できます
  3. nodeという名前のプロセスを見つけ、IDを書き留めます
  4. タイプStop-process <Id> 私はそれがwindowsユーザーのための助けだと思います

0

今日同じ問題に遭遇し、ポートは使用されませんでした。次のアプローチが役立ちました。

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

0

Macの場合は、x86_64-apple-darwin13.4.0のIPがすべてです。エラーに従う場合は、x86_64-apple-darwin13.4.0に関連するものです。追加

127.0.0.1 x86_64-apple-darwin13.4.0

/ etc / hostsファイル。その後、問題はなくなりました


-1

ポートを変更するだけで、現在のポートがiisまたは他のサーバーで使用されている可能性があります。


これは4年前に尋ねられ、同じでより良い答えで答えられました。
ジョージ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.