Node.js
Express

Node.jsの開発で `warn - error raised: Error: listen EADDRINUSE` って怒られるときの対応

More than 1 year has passed since last update.

最近PCの調子が悪くて突如落ちる時があります。
Node.jsで開発をしているときにこんな感じで予期せぬ終了があると、Node.jsを次に起動するときにwarn - error raised: Error: listen EADDRINUSEって怒られるときがあります。

$ node app.js
 info  - socket.io started
 Express server listening on port 3002
・
・
・
(←プロセスの途中でPCが落ちる等で異常終了)

$ node app.js
   info  - socket.io started
   warn  - error raised: Error: listen EADDRINUSE

(←次に実行するとerrorに)

warn - error raised: Error: listen EADDRINUSEはそのポートが既に使われてる場合に発生するみたいです。つまり異常終了時のNode.jsプロセスが生きてるんですね。

解決策1 しばらく待ってから実行

そのうちNode.jsのプロセスが切れてくれるのを待ちます。

解決策2 起動ポートを変更する

app.jsのポートを変更して再起動すれば解決します。

解決策3(本命) プロセスを切って再実行

複数人開発等でポートの変更を出来ない場合もあります。
例えば、http://localhost:3000 というアクセスの仕方をフロントエンジニアに教えておいて,そこでデバッグしてもらうときなどそういうケースは多い気がします。

そんなときは、psコマンド(とgrep)でプロセス名を調べて、killでプロセスを終わらせて、Node.jsを再実行すれば解決します。

$ ps aux | grep node
user 18200  0.4 13.2 990828 80392 pts/0    Sl+  08:43   0:03 node app.js
user 18455  0.0  0.1 114492   892 pts/1    S+   08:55   0:00 grep node
$ kill 18200

再び実行すれば問題無く起動します。

$ node app.js
   info  - socket.io started
  Express server listening on port 3002

このエラーのときも同じ対応でいけるかも

追記: 2014/6/4

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE

追記: 2017/7/2

久々にこのエラー出してしまった

events.js:182
      throw er; // Unhandled 'error' event
      ^

Error: listen EACCES 0.0.0.0:80