first of all: always listen for 'error' events on EventEmitters. in this 
case the req and res objects.

then you could use domains to catch the whole proxy, so you have a single 
point of catching. Though i'm not sure if they are ok to use in 0.8.X

it considered harmfull to override the ucaughtException, but you could, 
where you close the server, spawn a new one, log and exit the old one

Am Mittwoch, 18. Dezember 2013 03:28:17 UTC+1 schrieb ming:
>
> Hi,
> i've been running a node server application which crashes probably once a 
> week due to an uncaught "Can't render headers ..." exception.   The 
> skeleton of the code is like:
>
> =================================
> var
>   httpProxy   = require('http-proxy'),
>   spdy        = require('spdy'),
>   ...
>
> spdy.createServer
> (
>   options,
>   function(req,res)
>   {
>     if (...) 
>     {
>       ...  
>       var proxy = new httpProxy.HttpProxy({target: {host: ..., port: 
> ...}});   //  <1>
>
>       proxy.on
>       (
>         'proxyError',
>          function(err,req,res)
>          {
>            res.writeHead(500, {'Content-Type': 'text/plain'});
>            res.end('Something went wrong and we are reporting a custom 
> error message.');
>            util.log('!!!!!  ProxyError received');
>          }
>       );
>
>       proxy.proxyRequest(req,res);    //  <2>
>       ...
>     }
>   }
> )
> ==========================================
>
>
> In the log file, i can see the message "!!!!!  ProxyError received" being 
> printed.
>
> One possible cause of this problem may be related to DNS resolution, HTTP 
> proxy, or firewall.   The crash happened at either <1> or <2> even though i 
> don't know for sure which.  What is the proper way to guard against such 
> server crash in this particular case?   i don't think wrap <1> and/or <2> 
> in a try-catch block works due to the asynchronous nature of <1> & <2>.
>
> The stack trace looks like:
>
>      http.js:715
>      throw new Error('Can\'t render headers after they are sent to the 
> client.'
>      ^
>      Error: Can't render headers after they are sent to the client.
>      at ServerResponse.OutgoingMessage._renderHeaders (http.js:715:11)
>      at ServerResponse.writeHead (http.js:1059:20)
>      at Socket.proxyError 
> (/opt/share/node_modules/http-proxy/lib/node-http-proxy/http-proxy.js:193:9)
>      at Socket.g (events.js:192:14)
>      at Socket.EventEmitter.emit (events.js:126:20)
>      at Socket.connect.require.lookup.addressType (net.js:699:16)
>      at process.startup.processNextTick.process._tickCallback 
> (node.js:245:9)
>
> The node.js version in use is 0.8.22 and the OS distro is RHEL 6.2 but i 
> don't think the versions are to be blamed.  
>
> Thanks.
>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to