mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
[minor] add middleware to node-http-proxy
This commit is contained in:
parent
25c06a3a95
commit
c773eedeb6
@ -112,6 +112,30 @@ exports.getMaxSockets = function () {
|
|||||||
exports.setMaxSockets = function (value) {
|
exports.setMaxSockets = function (value) {
|
||||||
maxSockets = value;
|
maxSockets = value;
|
||||||
};
|
};
|
||||||
|
//
|
||||||
|
// stack
|
||||||
|
// adapted from https://github.com/creationix/stack
|
||||||
|
//
|
||||||
|
|
||||||
|
function stack (middlewares, proxy) {
|
||||||
|
var handle;
|
||||||
|
middlewares.reverse().forEach(function (layer) {
|
||||||
|
|
||||||
|
var child = handle;
|
||||||
|
var next = function (err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
//return error(req, res, err);
|
||||||
|
}
|
||||||
|
child(req, res);
|
||||||
|
}
|
||||||
|
next.__proto__ = proxy;
|
||||||
|
handle = function (req, res) {
|
||||||
|
layer(req, res, next);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ### function createServer ([port, host, options, handler])
|
// ### function createServer ([port, host, options, handler])
|
||||||
@ -127,55 +151,54 @@ exports.setMaxSockets = function (value) {
|
|||||||
//
|
//
|
||||||
exports.createServer = function () {
|
exports.createServer = function () {
|
||||||
var args = Array.prototype.slice.call(arguments),
|
var args = Array.prototype.slice.call(arguments),
|
||||||
callback = typeof args[0] === 'function' && args.shift(),
|
callback,
|
||||||
options = {}, port, host, forward, silent, proxy, server, handler;
|
options = {}, port, host, forward, silent, proxy, server, middleware = [];
|
||||||
|
|
||||||
if (args.length >= 2) {
|
args.forEach(function (arg) {
|
||||||
port = args[0];
|
|
||||||
host = args[1];
|
|
||||||
options = args[2] || {};
|
|
||||||
}
|
|
||||||
else if (args.length === 1) {
|
|
||||||
options = args[0] || {};
|
|
||||||
if (!options.router && !callback) {
|
|
||||||
throw new Error('Cannot create server with no router and no callback');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy = new HttpProxy(options);
|
switch (typeof arg) {
|
||||||
|
case 'string': host = arg; break;
|
||||||
|
case 'number': port = arg; break;
|
||||||
|
case 'function': middleware.push(arg); break;
|
||||||
|
case 'object': options = arg; break;
|
||||||
|
};
|
||||||
|
|
||||||
handler = function (req, res) {
|
});
|
||||||
if (callback) {
|
|
||||||
//
|
var proxy = new HttpProxy(options);
|
||||||
// If we were passed a callback to process the request
|
|
||||||
// or response in some way, then call it.
|
if(middleware.length)
|
||||||
//
|
//handler = callback = middleware.shift()
|
||||||
callback(req, res, proxy);
|
//else if (middleware.length)
|
||||||
}
|
handler = callback = stack(middleware, proxy);
|
||||||
else if (port && host) {
|
|
||||||
|
if (port && host) {
|
||||||
//
|
//
|
||||||
// If we have a target host and port for the request
|
// If we have a target host and port for the request
|
||||||
// then proxy to the specified location.
|
// then proxy to the specified location.
|
||||||
//
|
//
|
||||||
proxy.proxyRequest(req, res, {
|
handler = function (req, res) {
|
||||||
port: port,
|
proxy.proxyRequest(req, res, {
|
||||||
host: host
|
port: port,
|
||||||
});
|
host: host
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (proxy.proxyTable) {
|
else if (proxy.proxyTable) {
|
||||||
//
|
//
|
||||||
// If the proxy is configured with a ProxyTable
|
// If the proxy is configured with a ProxyTable
|
||||||
// instance then use that before failing.
|
// instance then use that before failing.
|
||||||
//
|
//
|
||||||
proxy.proxyRequest(req, res);
|
handler = function (req, res) {
|
||||||
|
proxy.proxyRequest(req, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else if (!handler) {
|
||||||
//
|
//
|
||||||
// Otherwise this server is improperly configured.
|
// Otherwise this server is improperly configured.
|
||||||
//
|
//
|
||||||
throw new Error('Cannot proxy without port, host, or router.')
|
throw new Error('Cannot proxy without port, host, or router.')
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
server = options.https
|
server = options.https
|
||||||
? https.createServer(options.https, handler)
|
? https.createServer(options.https, handler)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user