Node.jsでのEADDRINUSEエラーの解決方法


このエラーを解決するためには、以下の方法を試すことができます。

  1. 別のポート番号を使用する: エラーが発生しているポート番号(例: 3000)が既に使用されている場合、他の利用可能なポート番号を選択して試してみてください。ポート番号は、一般的に3000番以降の範囲から選ぶことが推奨されています。

  2. サーバーのプロセスを終了する: エラーメッセージには「address already in use」(アドレスは既に使用中)と表示されているため、同じポート番号で既に実行中のプロセスがある可能性があります。ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行して、ポートを解放してください。

    lsof -i :3000

    上記のコマンドは、ポート番号3000を使用しているプロセスを表示します。表示されたプロセスのPIDを確認し、次のコマンドを実行して終了させます。

    kill -9 <PID>

    <PID>は、先ほど確認したプロセスのIDです。

  3. タイムアウトを設定する: サーバーがポートを開放するまでのタイムアウトを設定することもできます。以下はExpressフレームワークを使用した例です。

    const express = require('express');
    const server = express();
    server.listen(3000, () => {
     console.log('Server started on port 3000');
    });
    server.on('error', (error) => {
     if (error.code === 'EADDRINUSE') {
       console.log('Address already in use, retrying...');
       setTimeout(() => {
         server.close();
         server.listen(3000);
       }, 1000);
     }
    });

    上記のコードでは、server.on('error')イベントリスナーを使用して、EADDRINUSEエラーが発生した場合にタイムアウトを設定しています。タイムアウト後にサーバーを再起動することで、ポートが解放されるまでの待機時間を作ります。

これらの方法を試してみて、EADDRINUSEエラーを解決してください。異なるポート番号の選択、プロセスの終了、タイムアウトの設定は、一般的な解決策として効果的です。