mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
new error propagation
This commit is contained in:
parent
07551c63e4
commit
3a39e444ff
@ -48,8 +48,9 @@ proxy.createProxyServer = function createProxyServer(options) {
|
|||||||
options[key].agent = new (options.ssl ? https.Agent : http.Agent)(options[key].maxSockets || 100);
|
options[key].agent = new (options.ssl ? https.Agent : http.Agent)(options[key].maxSockets || 100);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
options.ee = new events.EventEmitter2({ wildcard: true, delimiter: ':' });
|
||||||
|
|
||||||
return {
|
return {
|
||||||
__proto__: new events.EventEmitter2({ wildcard: true, delimiter: ':' }),
|
|
||||||
web : caronte.createWebProxy(options),
|
web : caronte.createWebProxy(options),
|
||||||
ws : caronte.createWsProxy(options),
|
ws : caronte.createWsProxy(options),
|
||||||
listen : function listen(port) {
|
listen : function listen(port) {
|
||||||
@ -62,6 +63,9 @@ proxy.createProxyServer = function createProxyServer(options) {
|
|||||||
server.listen(port);
|
server.listen(port);
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
|
},
|
||||||
|
emitter : function() {
|
||||||
|
return options.ee;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -33,19 +33,20 @@ function createRightProxy(type) {
|
|||||||
return function(req, res) {
|
return function(req, res) {
|
||||||
var self = this,
|
var self = this,
|
||||||
ev = 'caronte:' + type + ':';
|
ev = 'caronte:' + type + ':';
|
||||||
//self.emit(ev + 'begin', req, res);
|
options.ee.emit(ev + 'begin', req, res);
|
||||||
|
|
||||||
|
|
||||||
passes.some(function(pass) {
|
passes.some(function(pass) {
|
||||||
var evnt = ev + pass.name.toLowerCase();
|
var evnt = ev + pass.name.toLowerCase();
|
||||||
|
|
||||||
//self.emit(evnt + 'begin', req, res);
|
options.ee.emit(evnt + 'begin', req, res);
|
||||||
var val = pass(req, res, options, self);
|
var val = pass(req, res, options);
|
||||||
//self.emit(evnt + 'end');
|
options.ee.emit(evnt + 'end');
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
});
|
});
|
||||||
|
|
||||||
//self.emit(ev + 'end');
|
options.ee.emit(ev + 'end');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,18 +79,17 @@ function XHeaders(req, res, options) {
|
|||||||
* @param {ClientRequest} Req Request object
|
* @param {ClientRequest} Req Request object
|
||||||
* @param {IncomingMessage} Res Response object
|
* @param {IncomingMessage} Res Response object
|
||||||
* @param {Object} Options Config object passed to the proxy
|
* @param {Object} Options Config object passed to the proxy
|
||||||
* @param {Object} Instance Proxy object that emits events
|
|
||||||
*
|
*
|
||||||
* @api private
|
* @api private
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function stream(req, res, options, instance) {
|
function stream(req, res, options) {
|
||||||
if(options.forward) {
|
if(options.forward) {
|
||||||
req.pipe(new ForwardStream(options, instance));
|
req.pipe(new ForwardStream(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(options.target) {
|
if(options.target) {
|
||||||
return req.pipe(new ProxyStream(options, res, instance)).pipe(res);
|
return req.pipe(new ProxyStream(options, res)).pipe(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
res.end();
|
res.end();
|
||||||
|
|||||||
@ -3,12 +3,11 @@ var Duplex = require('stream').Duplex,
|
|||||||
http = require('http'),
|
http = require('http'),
|
||||||
https = require('https');
|
https = require('https');
|
||||||
|
|
||||||
function ProxyStream(options, res, instance) {
|
function ProxyStream(options, res) {
|
||||||
Duplex.call(this);
|
Duplex.call(this);
|
||||||
|
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.res = res;
|
this.res = res;
|
||||||
this.instance = instance;
|
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
@ -86,7 +85,7 @@ ProxyStream.prototype.onResponse = function(proxyRes) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ProxyStream.prototype.onError = function(e) {
|
ProxyStream.prototype.onError = function(e) {
|
||||||
if(this.instance.emit('proxyError', this.req, this.res, e)) return;
|
if(this.options.ee.emit('proxyError', this.req, this.res, e)) return;
|
||||||
|
|
||||||
this.res.writeHead(500, { 'Content-Type': 'text/plain' });
|
this.res.writeHead(500, { 'Content-Type': 'text/plain' });
|
||||||
this.res.end('Internal Server Error');
|
this.res.end('Internal Server Error');
|
||||||
|
|||||||
@ -36,10 +36,12 @@ WebsocketStream.prototype.onPipe = function(req) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
WebsocketStream.prototye.onFinish = function() {
|
WebsocketStream.prototye.onFinish = function() {
|
||||||
|
this.proxyReq.end();
|
||||||
};
|
};
|
||||||
|
|
||||||
WebsocketStream.prototype.onResponse = function(proxyRes) {
|
WebsocketStream.prototype.onResponse = function(proxyRes) {
|
||||||
|
this.proxyRes = proxyRes;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user