2012-03-03 15 views
24

Questo è il mio codice (E 'CoffeeScript e utilizza i colori ma non è rilevante)Come posso rilevare errori node.js/express server come 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 è un express.js server. Sto avendo difficoltà a capire perché gli errori generati come risultato di hons_server.listen() non vengono catturati dal try/catch. Quando eseguo il mio server per due volte ho l'uscita:

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

Mi piacerebbe sapere il motivo per cui l'errore lanciato non si trova, e come/dove posso prendere l'errore EADDRINUSE.

risposta

17

intercettare l'evento error sul server isntance

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

Per curiosità, come hai fatto a saperlo? So che non era in [la documentazione] (http://expressjs.com/guide.html) e non riesco a trovare nulla su quali eventi il ​​server express supporta – Hubro

+3

Fondamentalmente, il server express è il [http Server] (http://nodejs.org/docs/latest/api/http.html#http_class_http_server), che è un emettitore di eventi. –

+0

Funziona ancora nella versione più recente di Node? Si prega di controllare la risposta qui sotto e aggiornare il vostro se necessario. – Hubro

22

La soluzione accettata non ha funzionato per me su nodejs 0.8.22 ed esprimere 3.1.0.

Questo ha fatto il trucco:

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

vedere anche Node.js Express app handle startup errors

+0

sì, grazie. – qodeninja

Problemi correlati