@@ -55,6 +55,7 @@ const PROXY_HANDLER_TYPE = {
5555 ON_RESPONSE_HEADERS : "ON_RESPONSE_HEADERS" ,
5656 ON_RESPONSE_DATA : "ON_RESPONSE_DATA" ,
5757 ON_RESPONSE_END : "ON_RESPONSE_END" ,
58+ ON_ERROR : "ON_ERROR" ,
5859} ;
5960
6061module . exports . PROXY_HANDLER_TYPE = PROXY_HANDLER_TYPE ;
@@ -635,21 +636,29 @@ Proxy.prototype.onCertificateMissing = function (ctx, files, callback) {
635636} ;
636637
637638Proxy . prototype . _onError = function ( kind , ctx , err ) {
638- this . onErrorHandlers . forEach ( function ( handler ) {
639- return handler ( ctx , err , kind ) ;
640- } ) ;
641- if ( ctx ) {
642- ctx . onErrorHandlers . forEach ( function ( handler ) {
643- return handler ( ctx , err , kind ) ;
644- } ) ;
639+ if ( ctx ) {
640+ ctx . currentHandler = PROXY_HANDLER_TYPE . ON_ERROR ;
641+ }
645642
646- if ( ctx . proxyToClientResponse && ! ctx . proxyToClientResponse . headersSent ) {
647- ctx . proxyToClientResponse . writeHead ( 504 , "Proxy Error" ) ;
648- }
649- if ( ctx . proxyToClientResponse && ! ctx . proxyToClientResponse . finished ) {
650- ctx . proxyToClientResponse . end ( "" + kind + ": " + err , "utf8" ) ;
643+ async . forEach (
644+ this . onErrorHandlers . concat ( ctx ?. onErrorHandlers || [ ] ) ,
645+ function ( fn , callback ) {
646+ if ( fn ) {
647+ return fn ( ctx , err , kind , callback ) ;
648+ }
649+ callback ( ) ;
650+ } ,
651+ function ( ) {
652+ if ( ctx ) {
653+ if ( ctx . proxyToClientResponse && ! ctx . proxyToClientResponse . headersSent ) {
654+ ctx . proxyToClientResponse . writeHead ( 504 , "Proxy Error" ) ;
655+ }
656+ if ( ctx . proxyToClientResponse && ! ctx . proxyToClientResponse . finished ) {
657+ ctx . proxyToClientResponse . end ( "" + kind + ": " + err , "utf8" ) ;
658+ }
659+ }
651660 }
652- }
661+ ) ;
653662} ;
654663
655664Proxy . prototype . _onWebSocketServerConnect = function ( isSSL , ws , upgradeReq ) {
0 commit comments