Use proxy-http-request.

This commit is contained in:
Julien Fontanet
2015-03-17 12:50:02 +01:00
parent a7e2f776e4
commit b2233f61e4
3 changed files with 2 additions and 106 deletions

View File

@@ -60,6 +60,7 @@
"lodash.pluck": "^3.0.2",
"make-error": "^0.3.0",
"multikey-hash": "^1.0.1",
"proxy-http-request": "0.0.1",
"require-tree": "~1.0.1",
"schema-inspector": "^1.5.1",
"serve-static": "^1.9.2",

View File

@@ -1,105 +0,0 @@
'use strict';
//====================================================================
var formatQueryString = require('querystring').stringify;
var httpRequest = require('http').request;
var httpsRequest = require('https').request;
var parseUrl = require('url').parse;
var assign = require('lodash.assign');
var debug = require('debug')('xo:proxyRequest');
var forEach = require('lodash.foreach');
var isString = require('lodash.isstring');
//====================================================================
var DEFAULTS = {
method: 'GET',
};
var HTTP_RE = /^http(s?):?$/;
//====================================================================
function proxyRequest(opts, upReq, upRes) {
if (isString(opts)) {
debug('parsing URL %s', opts);
opts = parseUrl(opts);
}
// Merges options with defaults.
opts = assign({}, DEFAULTS, {
method: upReq.method,
}, opts);
opts.headers = assign({},
DEFAULTS.headers,
upReq.headers,
{
connection: 'close',
host: opts.hostname || opts.host,
},
opts.headers
);
// `http(s).request()` does not understand pathname, query and
// search.
if (!opts.path) {
var path = opts.pathname || '/';
var query;
if (opts.search) {
path += opts.search;
} else if ((query = opts.query)) {
if (!isString(query)) {
query = formatQueryString(query);
}
path += '?' + query;
}
opts.path = path;
}
var matches;
var isSecure = !!(
opts.protocol &&
(matches = opts.protocol.match(HTTP_RE)) &&
matches[1]
);
delete opts.protocol;
debug('proxying %s http%s://%s%s',
opts.method,
isSecure ? 's' : '',
opts.hostname,
opts.path
);
var request = isSecure ? httpsRequest : httpRequest;
var downReq = request(opts, function onResponse(downRes) {
forEach(downRes.headers, function forwardResponseHeaderUp(value, name) {
upRes.setHeader(name, value);
});
downRes.pipe(upRes);
downRes.on('error', function forwardResponseErrorUp(error) {
upRes.emit('error', error);
});
});
upReq.pipe(downReq);
downReq.on('error', function forwardRequestErrorUp(error) {
upReq.emit('error', error);
});
upReq.on('close', function forwardRequestAbortionDown() {
downReq.abort();
});
}
module.exports = proxyRequest;

View File

@@ -9,6 +9,7 @@ $isEmpty = require 'lodash.isempty'
$isString = require 'lodash.isstring'
$pluck = require 'lodash.pluck'
$Promise = require 'bluebird'
$proxyRequest = require 'proxy-http-request'
{createClient: $createRedisClient} = require 'then-redis'
{
hash: $hash
@@ -18,7 +19,6 @@ $Promise = require 'bluebird'
$Connection = require './connection'
$Model = require './model'
$proxyRequest = require './proxy-request'
$RedisCollection = require './collection/redis'
$spec = require './spec'
$XAPI = require './xapi'