1. ホーム
  2. node.js

[解決済み] ノード / エクスプレス EADDRINUSE、アドレスはすでに使用中です - サーバーを停止してください。

2022-02-08 23:20:51

質問

node.jsでconnectを使って簡単なサーバーを動かしています。

var server = require('connect').createServer();
//actions...
server.listen(3000);

私のコードでは、実際のハンドラはありますが、これは基本的なアイデアです。私が経験した問題は

EADDRINUSE, Address already in use

以前クラッシュしたりエラーが発生したアプリケーションを再度実行すると、このエラーが表示されます。ターミナルの新しいインスタンスを開いていないので、プロセスを ctr + z .

サーバーまたは接続を閉じるだけでよいのは間違いないのですが。私は server.close()process.on('exit', ...); を、運が悪いことに

解決方法を教えてください。

process.on('exit', ..) は、プロセスがクラッシュしたり、強制終了した場合には呼び出されません。イベントループが終了したときにのみ呼び出されます。 server.close() みたいな はイベントループを終了させますが(まだあちこちで現在実行中のスタックを待つ必要があります)、これを終了イベントの中に入れるのは意味がありません...。

クラッシュ時、次のようにします。 process.on('uncaughtException', ..) そして、キルには process.on('SIGTERM', ..)

つまり、SIGTERM(デフォルトのキルシグナル)はアプリにクリーンアップをさせ、SIGKILL(即時終了)はアプリに何もさせないということです。