2012-03-03 12 views
24

Este es mi código (Es CoffeeScript y utiliza colores, pero eso no es relevante)¿Cómo atrapo los errores del servidor node.js/express como EADDRINUSE?

# 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 es un express.js server. Me está costando entender por qué los errores arrojados como resultado de hons_server.listen() no son detectados por el try/catch. Cuando ejecuto mi servidor dos veces consigo la salida:

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

me gustaría saber por qué el error que se produce no es capturado, y cómo/dónde puedo detectar el error EADDRINUSE.

Respuesta

17

detectar el evento error en el servidor isntance

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

Por curiosidad, ¿cómo lo sabes? Sé que no estaba en [la documentación] (http://expressjs.com/guide.html) y no puedo encontrar nada sobre qué eventos admite el servidor express – Hubro

+3

Básicamente, el servidor express es el [Servidor http] (http://nodejs.org/docs/latest/api/http.html#http_class_http_server), que es un emisor de eventos. –

+0

¿Esto todavía funciona en la versión más nueva de Node? Por favor revisa la respuesta a continuación y actualiza la tuya si es necesario. – Hubro

22

La solución aceptada no funcionó para mí en nodejs 0.8.22 y expresar 3.1.0.

Esto hizo el truco:

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

Véase también Node.js Express app handle startup errors

+0

sí, gracias. – qodeninja

Cuestiones relacionadas