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

如何捕获node.js/express服务器错误,如EADDRINUSE?,node.js,express,error-handling,coffeescript,Node.js,Express,Error Handling,Coffeescript,这是我的密码 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 荣誉服务器是一个。我很难理解为什么try/catch无法捕获由hons\u serv

这是我的密码

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
荣誉服务器
是一个。我很难理解为什么try/catch无法捕获由hons\u server.listen()引发的错误。当我运行服务器两次时,会得到以下输出:

$ coffee src/server.coffee Listening to port 9090 node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: listen EADDRINUSE at errnoException (net.js:632:11) at Array.0 (net.js:733:26) at EventEmitter._tickCallback (node.js:192:40) $coffee src/server.coffee 监听端口9090 node.js:201 抛出e;//process.nextTick错误,或第一次勾选时的“error”事件 ^ 错误:请使用侦听器 在errnoException(net.js:632:11) at Array.0(net.js:733:26) 在EventEmitter上进行回调(node.js:192:40)
我想知道为什么没有捕获抛出的错误,以及如何/在何处捕获EADDRINUSE错误。

在服务器上侦听
错误事件

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

接受的解决方案在nodejs 0.8.22和express 3.1.0上对我不起作用

这就成功了:

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

出于好奇,你是怎么知道的?我知道它不在,也找不到express server支持哪些事件基本上,express server是,它是一个事件发射器。这在最新版本的Node中仍然有效吗?请检查下面的答案,并在需要时更新您的答案。它仍然有效。从express 3.0.0及以后,express对象不再从
http.Server
继承,它只是一个插入服务器的函数。
error
事件必须从服务器对象而不是express函数监听。我希望express
server.listen(function(err){…}
回调能够支持错误检查,但是这个监听类似
server.on('error',function(err){…})的事件的建议非常有效