title: Recover from Uncaught Exception in Node.JS
body: <p>OK, so I have a problem.  If an uncaught exception occurs while I am handling an HTTP request, I have no opportunity to call the end() method on the http.ServerResponse object.  Therefore, the server hangs forever and never fulfills the request.</p>
  
  <p>Here's an example:</p>
  
  <pre><code>var express = require('express');
  var app = express.createServer();
  var reqNum = 0;
  app.get('/favicon.ico', function(req, res) {res.send(404);});
  app.get('*', function(req, res, next) {
      console.log("Request #", ++reqNum, ":", req.url);
      next();
  });
  app.get('/error', function(req, res, next) {
      throw new Error("Problem occurred");
  });
  app.get('/hang', function(req, res, next) {
      console.log("In /hang route");
      setTimeout(function() {
          console.log("In /hang callback");
          if(reqNum &gt;= 3)
              throw new Error("Problem occurred");
          res.send("It worked!");
      }, 2000);
  });
  process.on('uncaughtException', function(err) {
      console.log("Uncaught exception!", err);
  });
  app.listen(8080);
  </code></pre>
  
  <p>If you visit /error, an exception occurs, but it is caught.  The user receives an error message - no problem.  If I visit /hang, though, the server will eventually throw an uncaught exception and hang forever. Any subsequent requests for /hang will hang.</p>
  
  <p>This sucks. Any advice for how to fix this issue?</p>