web-dev-qa-db-ja.com

EADDRINUSEのようなnode.js / expressサーバーエラーをキャッチするにはどうすればよいですか?

これは私のコードです。

_if !module.parent
    try
        hons_server.listen config.port
        console.log 'Listening to port ' + config.port
    catch err
        console.error "Couldn't start server: #{String(err)}".red
_

_hons_server_は express.jsサーバー です。 hons_server.listen()の結果としてスローされたエラーがtry/catchによってキャッチされない理由を理解するのに苦労しています。サーバーを2回実行すると、次の出力が得られます。

[。 // process.nextTickエラー、または最初のティックでの「error」イベント
 ^ 
エラー:errnoException(net.js:632:11)[.____でEADDRINUSE 
をリッスンします。 ] at Array.0(net.js:733:26)
 at EventEmitter._tickCallback(node.js:192:40)

スローされたエラーがキャッチされない理由と、EADDRINUSEエラーをキャッチする方法/場所を知りたいのですが。

29
Hubro

サーバーインスタンスでerrorイベントをリッスンします

hons_server.on 'error', (err) ->
    console.log 'there was an error:', err.message
21
fent

受け入れられたソリューションは、nodejs0.8.22およびexpress3.1.0では機能しませんでした。

これはトリックをしました:

process.on('uncaughtException', function(err) {
    if(err.errno === 'EADDRINUSE')
         console.log(...);
    else
         console.log(err);
    process.exit(1);
});     

Node.js Expressアプリが起動エラーを処理する も参照してください

25
mistaecko