如何捕获像EADDRINUSE的node.js / express服务器错误?

这是我的代码(这是coffeescript和使用的颜色,但这是不相关的)

# If this module is executed if !module.parent # Start server 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捕获。 当我运行我的服务器两次,我得到的输出:

 $ coffee src / server.coffee
听港口9090

 Node.js的:201
        扔e;  // process.nextTick错误,或第一次打勾时发生“错误”事件
               ^
错误:听EADDRINUSE
    在errnoException(net.js:632:11)
    在Array.0(net.js:733:26)
    在EventEmitter._tickCallback(node.js:192:40)

我想知道为什么没有捕获抛出的错误,以及如何/在哪里我可以捕获EADDRINUSE错误。

监听服务器上的error事件

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

接受的解决scheme不适用于nodejs 0.8.22和3.1.0。

这个诀窍:

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

另请参阅Node.js Express应用程序处理启动错误