次のコマンドを使用して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>
私たちは時々私たちのエクスプレスアプリを実行するときに私たちは同様のエラーを取得します。その場合も同様にしなければなりません。どの端末でも実行されているかどうかを確認する必要があります。プロセスを見つけて強制終了したい場合は、次のステップに従ってください。
または
単一のコマンドを使用して、実行中のすべてのノードプロセスを閉じます。
ps aux | awk '/node/{print $2}' | xargs kill -9
インスタンスはおそらくまだ実行中です。これで修正されます。
killall node
更新:このコマンドはLinux/UbuntuとMacでのみ動作します。
Linuxを使用している場合、この問題はNodejsがrootとして実行されていない場合にも発生する可能性があります。
これから変更します。
nodejs /path/to/script.js
これに:
Sudo nodejs /path/to/script.js
ちょうど私に起こりました、そして、ここで他の提案のどれもそれを直しませんでした。幸運なことに、rootとして実行したときにスクリプトが先日動作していたことを思い出しました。これが誰かに役立つことを願っています!
免責事項:これはおそらく本番環境に最適な解決策ではありません。 rootとしてあなたのサービスを開始することはあなたのサーバー/アプリケーションにいくつかのセキュリティホールを導入するかもしれません。私の場合、これはローカルサービスの解決策でしたが、原因を特定するために他の人にもう少し時間をかけてもらうことをお勧めします。
これは、スクリプトを実行するために使用しているポートがすでに使用されているためです。その投稿を使用している他のすべてのノードを停止する必要があります。そのためには、すべてのノードをチェックすることができます。
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>
ノードNodeが使用しようとしているポートは、すでに別のプログラムによって使用されている可能性があります。私の場合は、最近インストールした ntop でした。私はそれを実現するためにブラウザで http:// localhost:3000 / を開く必要がありました。プロセスを見つけるための別の方法がここに与えられています。
これはあなたのファイルが今走っていることを意味します。以下のコードを入力してもう一度お試しください。
Sudo pkill node
同じポート番号を使用したい場合は、端末にkill %
と入力してください。これにより、現在のバックグラウンドプロセスが強制終了され、ポートが解放されて使用できるようになります。
他のターミナルウィンドウや別のポートで実行されている場合でも、実行中の他のすべてのノードサーバーを閉じます。これで問題は解決するはずです。
3000(エクスプレススケルトンセットアップで使用されるデフォルト)をリッスンしているすべてのノードインスタンスと他のサービスを無効にしようとした場合は、あなたの環境が 'port'を予期しないものに定義していないことを確認してください。それ以外の場合は、おそらく同じエラーが発生します。 express skeletonのapp.jsファイルの15行目に気付くでしょう。
app.set('port', process.env.PORT || 3000);
これを解決するには、実行しているサーバーを終了するか閉じます。 Eclipse IDEを使用している場合は、これに従ってください。
実行>デバッグ
実行中のプロセスを右クリックし、終了をクリックします。
私は同じ問題を抱えていました、そして私が以前CTRL + Cでキャンセルしたnodejsプロセスがまだ実行中であることを知りました。 Windows 10の問題は、 Ctrl + Cで正常に終了しないことです 。タスクマネージャを開き、手動でプロセスを強制終了しました。 GitHubで提供されている解決策は私にとってはうまくいきませんでした。
そのポートを使用しているサービスを停止します。
Sudo service NAMEOFSERVICE stop
- > 8080番ポートで何が実行されているのか、または何をチェックしたいのかを確認します。
lsof -i @localhost:8080
何かが実行されている場合は、uを閉じるか、またはkillコマンドを使用して閉じます。
答えのどれも私のために働きませんでした。
コンピュータを再起動したときに、サーバを起動して実行することができました。
マックshutdown now -r
LinuxSudo shutdown now -r
同じプロセスを複数回強制終了し、ポート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, {});
私の場合、この問題はexpressjsの `use 'メソッド呼び出しでnext()
を呼び出すのを忘れたことが原因でした。
現在のミドルウェアが要求 - 応答サイクルを終了しない場合は、next()を呼び出して次のミドルウェアに制御を渡す必要があります。それ以外の場合、要求はハングしたままになります。
このエラーの理由
指定したポートで他のプロセスが既に実行されています
シンプルで迅速なソリューション
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を入力する必要があります)
これは私のために働きました。
http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html
プロジェクトプロパティからポート番号を変更するだけです。
events.js:183投げました。 //未処理の 'error'イベント
私はまた同じ種類の問題を得、多くの方法を試みたが、ついにこれを得た、これはうまくいく
npm install [email protected] --save-dev --save-exact
より明確にするためにこのリンクを参照してください https://github.com/ionic-team/ionic-cli/issues/2922
Gruntfile.jsからポートを変更して再度実行することもできます。
私の場合はvagrant reload
も実行しなければなりませんでした。仮想マシンでエクスプレスアプリケーションを実行しているノードプロセスがなくても、vagrantボックスを再ロードするまでこのエラーが発生していました。
Windowsを使用している場合は、node.jsのタスクマネージャからプロセスを終了できます。
実際には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);
});
これは私のために働きました。
Visual Studio Codeで端末を確認するだけです。ノードアプリを実行していて、ラップトップを休止状態にしてから、翌朝、ソフトウェアの開発に戻ります。再度コマンドnodemon app.jsを実行すると、最初は夜間から実行され、2番目は2番目のコマンドを実行して最新のコマンドを実行したため、2つのコマンドプロンプトが同じポートをリッスンしているため、この問題が発生しています。 1つの端末またはすべての端末を単純に閉じてから、ノードapp.jsまたはnodemon app.jsを実行します