mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
[minor] Style updates and whitespace cleaning for consistency
This commit is contained in:
parent
8eaec35074
commit
f0917a3f97
@ -1,11 +1,34 @@
|
||||
#!/usr/local/bin/node
|
||||
/*
|
||||
body-decoder.js: Example of body-decoder middleware with node-http-proxy
|
||||
|
||||
Copyright (c) 2010 Charlie Robbins, Mikeal Rogers, Fedor Indutny, & Marak Squires.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
var httpProxy = require('http-proxy'),
|
||||
http = require('http'),
|
||||
util = require('util'),
|
||||
colors = require('colors');
|
||||
|
||||
|
||||
exports.bodyMod = function () {
|
||||
console.log('middleware has been started.'.green);
|
||||
return function (req, res, next) {
|
||||
@ -16,16 +39,22 @@ exports.bodyMod = function () {
|
||||
console.log('ON DATA')
|
||||
total += data;
|
||||
});
|
||||
|
||||
req.on('end', function () {
|
||||
console.log('ON END')
|
||||
console.log(total);
|
||||
//
|
||||
// This line, uncommented, hangs forever.
|
||||
// proxy.proxyRequest(req, res, { port: 9000, host: 'localhost' });
|
||||
// The following also hangs forever.
|
||||
// next.proxyRequest(req, res, { port: 9000, host: 'localhost' });
|
||||
})
|
||||
//
|
||||
});
|
||||
|
||||
//
|
||||
// The following fires just fine.
|
||||
//proxy.proxyRequest(req, res, { port: 9000, host: 'localhost' });
|
||||
//
|
||||
console.log('request proxied...'.blue);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
gzip-middleware.js: Basic example of middleware in node-http-proxy
|
||||
gzip-middleware.js: Basic example of `connect-gzip` middleware in node-http-proxy
|
||||
|
||||
Copyright (c) 2010 Charlie Robbins, Mikeal Rogers, Fedor Indutny, Marak Squires, & Dominic Tarr.
|
||||
|
||||
@ -32,7 +32,6 @@ var util = require('util'),
|
||||
//
|
||||
// Basic Http Proxy Server
|
||||
//
|
||||
|
||||
httpProxy.createServer(
|
||||
require('connect-gzip').gzip({ matchType: /.?/ }),
|
||||
9000, 'localhost'
|
||||
@ -41,8 +40,7 @@ httpProxy.createServer(
|
||||
//
|
||||
// Target Http Server
|
||||
//
|
||||
http.createServer(
|
||||
function (req, res) {
|
||||
http.createServer(function (req, res) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
||||
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
|
||||
res.end();
|
||||
|
||||
@ -1,3 +1,29 @@
|
||||
/*
|
||||
url-middleware.js: Example of a simple url routing middleware for node-http-proxy
|
||||
|
||||
Copyright (c) 2010 Charlie Robbins, Mikeal Rogers, Fedor Indutny, & Marak Squires.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
var util = require('util'),
|
||||
colors = require('colors'),
|
||||
http = require('http'),
|
||||
@ -10,13 +36,18 @@ var util = require('util'),
|
||||
//
|
||||
|
||||
function matcher (url, dest) {
|
||||
//
|
||||
// First, turn the URL into a regex.
|
||||
// NOTE: Turning user input directly into a Regular Expression is NOT SAFE.
|
||||
//
|
||||
var r = new RegExp(url.replace(/\//, '\\/'));
|
||||
|
||||
//
|
||||
// This next block of code may look a little confusing.
|
||||
// It returns a closure (anonymous function) for each URL to be matched,
|
||||
// storing them in an array - on each request, if the URL matches one that has
|
||||
// a function stored for it, the function will be called.
|
||||
//
|
||||
return function (url) {
|
||||
var m = r(url)
|
||||
if (!m) {
|
||||
@ -24,7 +55,10 @@ function matcher (url, dest) {
|
||||
}
|
||||
var path = url.slice(m[0].length);
|
||||
console.log('proxy:', url, '->', dest);
|
||||
return {url: path, dest: dest};
|
||||
return {
|
||||
url: path,
|
||||
dest: dest
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,22 +95,25 @@ exports.urls = function (urls) {
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Now we set up our proxy.
|
||||
//
|
||||
httpProxy.createServer(
|
||||
//
|
||||
// This is where our middlewares go, with any options desired - in this case,
|
||||
// the list of routes/URLs and their destinations.
|
||||
//
|
||||
exports.urls({
|
||||
'/hello': { port: 9000, host: 'localhost' },
|
||||
'/charlie': { port: 80, host: 'charlieistheman.com' },
|
||||
'/google': { port: 80, host: 'google.com' }
|
||||
})
|
||||
});
|
||||
).listen(8000);
|
||||
|
||||
//
|
||||
// Target Http Server (to listen for requests on 'localhost')
|
||||
//
|
||||
http.createServer(
|
||||
function (req, res) {
|
||||
http.createServer(function (req, res) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
||||
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
|
||||
res.end();
|
||||
|
||||
@ -47,6 +47,7 @@ var server = http.createServer(function (req, res) {
|
||||
res.writeHead(200);
|
||||
res.end();
|
||||
});
|
||||
|
||||
server.listen(8080);
|
||||
|
||||
//
|
||||
|
||||
@ -117,25 +117,27 @@ exports.setMaxSockets = function (value) {
|
||||
// stack
|
||||
// adapted from https://github.com/creationix/stack
|
||||
//
|
||||
|
||||
function stack (middlewares, proxy) {
|
||||
var handle;
|
||||
middlewares.reverse().forEach(function (layer) {
|
||||
|
||||
var child = handle;
|
||||
handle = function (req, res) {
|
||||
var next = function (err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
//
|
||||
// TODO: figure out where to send errors.
|
||||
// return error(req, res, err);
|
||||
//
|
||||
}
|
||||
child(req, res);
|
||||
}
|
||||
|
||||
next.__proto__ = proxy;
|
||||
layer(req, res, next);
|
||||
};
|
||||
});
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
@ -153,18 +155,20 @@ function stack (middlewares, proxy) {
|
||||
//
|
||||
exports.createServer = function () {
|
||||
var args = Array.prototype.slice.call(arguments),
|
||||
callback,
|
||||
options = {}, port, host, forward, silent, proxy, server, middleware = [];
|
||||
callback, forward,
|
||||
port, host,
|
||||
proxy, server,
|
||||
options = {},
|
||||
middleware = [],
|
||||
silent;
|
||||
|
||||
args.forEach(function (arg) {
|
||||
|
||||
switch (typeof arg) {
|
||||
case 'string': host = arg; break;
|
||||
case 'number': port = arg; break;
|
||||
case 'function': middleware.push(arg); break;
|
||||
case 'object': options = arg; break;
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
var proxy = new HttpProxy(options);
|
||||
@ -180,7 +184,10 @@ exports.createServer = function () {
|
||||
host: host
|
||||
});
|
||||
}
|
||||
if(middleware.length) middleware.push(handler)
|
||||
|
||||
if (middleware.length) {
|
||||
middleware.push(handler);
|
||||
}
|
||||
}
|
||||
else if (proxy.proxyTable) {
|
||||
//
|
||||
@ -190,10 +197,17 @@ exports.createServer = function () {
|
||||
handler = function (req, res) {
|
||||
proxy.proxyRequest(req, res);
|
||||
}
|
||||
if(middleware.length) middleware.push(handler)
|
||||
|
||||
if (middleware.length) {
|
||||
middleware.push(handler);
|
||||
}
|
||||
}
|
||||
|
||||
if(middleware.length) handler = stack(middleware, proxy);
|
||||
if (middleware.length) {
|
||||
//handler = callback = middleware.shift()
|
||||
//else if (middleware.length)
|
||||
handler = callback = stack(middleware, proxy);
|
||||
}
|
||||
|
||||
if (!handler) {
|
||||
//
|
||||
@ -219,7 +233,6 @@ exports.createServer = function () {
|
||||
// websocket request automatically
|
||||
server.on('upgrade', function (req, socket, head) {
|
||||
// Tunnel websocket requests too
|
||||
|
||||
proxy.proxyWebSocketRequest(req, socket, head, {
|
||||
port: port,
|
||||
host: host
|
||||
@ -340,7 +353,9 @@ HttpProxy.prototype.buffer = function (obj) {
|
||||
// if they exist.
|
||||
//
|
||||
HttpProxy.prototype.close = function () {
|
||||
if (this.proxyTable) this.proxyTable.close();
|
||||
if (this.proxyTable) {
|
||||
this.proxyTable.close();
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
@ -407,7 +422,7 @@ HttpProxy.prototype.proxyRequest = function (req, res, options) {
|
||||
// * `x-forwarded-proto`: Protocol of the original request
|
||||
// * `x-forwarded-port`: Port of the original request.
|
||||
//
|
||||
if (options.enableXForwarded == true) {
|
||||
if (options.enableXForwarded === true) {
|
||||
req.headers['x-forwarded-for'] = req.connection.remoteAddress || req.connection.socket.remoteAddress;
|
||||
req.headers['x-forwarded-port'] = req.connection.remotePort || req.connection.socket.remotePort;
|
||||
req.headers['x-forwarded-proto'] = res.connection.pair ? 'https' : 'http';
|
||||
@ -624,9 +639,11 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, options
|
||||
res.writeHead(404);
|
||||
return res.end();
|
||||
}
|
||||
|
||||
options.port = location.port;
|
||||
options.host = location.host;
|
||||
}
|
||||
|
||||
//
|
||||
// WebSocket requests must have the `GET` method and
|
||||
// the `upgrade:websocket` header
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user