2012-03-03 60 views
24

这是我的代码(它的CoffeeScript中并使用颜色区分,但是这是不相关)如何捕获像EADDRINUSE这样的node.js/express服务器错误?

# 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_serverexpress.js server。我很难理解为什么由于hons_server.listen()引发的错误没有被try/catch捕获。当我运行我的服务器我两次得到的输出:

 
$ 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) 

我想知道为什么没有抓到抛出错误,以及如何/我在哪里可以赶上EADDRINUSE错误。

回答

17

监听error事件的服务器上isntance

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

出于好奇,你是怎么知道的?我知道这不是[文档](http://expressjs.com/guide.html),我无法找到任何关于快速服务器支持的事件 – Hubro 2012-03-03 10:02:40

+3

基本上,快速服务器是[http服务器] (http://nodejs.org/docs/latest/api/http.html#http_class_http_server),这是一个事件发布器。 – 2012-03-03 10:43:37

+0

这是否仍然在最新版本的Node中工作?请检查下面的答案,并在需要时更新你的答案。 – Hubro 2013-05-13 13:28:34

22

接受的解决方案并没有为我上的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 app handle startup errors

+0

是的,谢谢。 – qodeninja 2013-10-31 22:17:51

相关问题