2016-05-11 17 views
-2

スクリプトを実行しようとするとこのエラーが発生します。NodeJSのエラー

{ [Error: listen EADDRINUSE :::8000] 
    code: 'EADDRINUSE', 
    errno: 'EADDRINUSE', 
    syscall: 'listen', 
    address: '::', 
    port: 8000 } 
Error: listen EADDRINUSE :::8000 
    at Object.exports._errnoException (util.js:890:11) 
    at exports._exceptionWithHostPort (util.js:913:20) 
    at Server._listen2 (net.js:1234:14) 
    at listen (net.js:1270:10) 
    at Server.listen (net.js:1366:5) 
    at Server.listen.Server.attach (/usr/lib/node_modules/socket.io/lib/index.js:216:9) 
    at Timeout._onTimeout (/var/www/html/Bot/site.js:618:29) 
    at tryOnTimeout (timers.js:224:11) 
    at Timer.listOnTimeout (timers.js:198:5) 

Script.js周り〜605ライン

function load() { 
    query('SET NAMES utf8'); 
    query('SELECT `id` FROM `rolls` ORDER BY `id` DESC LIMIT 1', function(err, row) { 
     if((err) || (!row.length)) { 
      logger.error('Cant get number from the last game'); 
      logger.debug(err); 
      process.exit(0); 
      return; 
     } 
     currentRollid = row[0].id; 
     logger.trace('Roll '+currentRollid); 
    }); 
    loadHistory(); 
    setTimeout(function() { io.listen(8080); }, 3000); 
} 

618行は、私はこの問題を解決するにはどうすればよい

setTimeout(function() { io.listen(8080); }, 3000); 

のですか?私は変更io.listenポートをしようとするが、まだ動作しない。

+0

現在、ポート8000​​をリッスンしているプロセスを強制終了するか、空きポートに変更します。 http://stackoverflow.com/q/9898372/218196も参照してください。 –

+0

どのように私はこのプロセスを殺すことができますか? –

答えて

0

最初に、ポートがリッスンしようとしているときに、が既に使用されているときは、EADDRINUSEエラーがスローされることがわかります。

この問題を解決するには、アプリケーションがリッスンしようとしているポートを解放する必要があります(Linuxを使用している場合は、おそらくthis StackOverflow threadが使用されます)。

NodeJSでサーバーを作成するときは、[プロセス]終了イベントを待ち受けることをお勧めします。サーバーを閉じて、待機中のポートを解放することができます。

ここでNodeJSプロセスが終了する前に焼成することができるさまざまなイベントについての情報を提供していくつかの素晴らしいドキュメントです:

はに基づいて行くが、あなたが提供したスニペット、私はあなたがSocketIOを使用していると仮定しています。

This StackOverflow answerは、SocketIOサーバーを閉じる方法の素晴らしい例です。