Bueno, no sé si te pasó antes, pero si ocurre una excepción no manejada, corta el proceso 😛
Por ejemplo: tenemos nuestro WebServer genial corriendo en NodeJS y algo se nos pasó, algo que no esperabamos o alguna libreria explotó … chau server, se cae el proceso de NodeJS y por lo tanto nuestro WebServer muere con el :(

Eso no suena nada bien …

Fuera de que el try y el catch son nuestros amigos, cometemos errores y hay situaciones en las que se nos pasa, y tampoco podemos garantizar los catcheos de excepciones de todas las librerias que usamos.

Entonces, cual sería el nivel más alto para poner un try catch?: el objeto global process … ahí es cuando aparece un gran y maravilloso “try catch” para el proceso que nos puede “garantizar” (notese las comillas :P) que no se caiga al momento de explotar en mil colores:

process.on("uncaughtException", function (err) { 
  console.log('Seee voló en mil pedazos, pero el proceso sigue arriba');
  console.log('Exception: ' + err.stack);
});
 

Nos suscribimos al evento “uncaughtException” del process y a partir de ahi nos queda logear o hacer lo que creamos necesario al momento de una explosión no calculada.

Documentación de Node para Process Event Uncaughtexception

Librerías interesantes

Pero eso no es todo: como dije antes nos “garantiza”, pero entre comillas. Para estar completamente seguros tenemos alguna librerias:

Nodemon
Para ambiente de desarrollo, Nodemon vigila los archivos y si alguno se modifica re inicia le proceso
Forever
Una herramienta para asegurarnos que nuestro proceso corra por siempre, si cae vuelve arriba (se pueden configurar la cantidad de intentos y tambien usarlo dentro de la app NodeJS)
Node Supervisor
Basicamente hace lo mismo que las dos anteriores. Por linea de comando seteamos parámetros para vigilar, re-start onError, etc.
LearnBoost: Up
Otra opcion piola de parte de LearnBoost

Yo no probé ninguna y estoy con ganas de arrancar, usaste alguna de esas?, otra?