middleman-proxy
Advanced tools
Comparing version 0.1.0 to 0.1.1
var EventEmitter = require('events').EventEmitter; | ||
var http = require('http'); | ||
var Url = require('url'); | ||
var inherits = require('util').inherits; | ||
@@ -9,5 +10,5 @@ var Buffer = require('buffer').Buffer; | ||
var sizeof = require('object-sizeof'); | ||
var omit = require('lodash.omit'); | ||
var Cache = require('./cache'); | ||
var WriteBuffer = require('./writeBuffer'); | ||
var Url = require('url'); | ||
@@ -57,2 +58,3 @@ /** | ||
setHeaders: {}, | ||
ignoreHeaders: [], | ||
cacheMethods: 'any', | ||
@@ -117,2 +119,7 @@ followRedirect: true, | ||
} | ||
// convert ignoreHeaders to lower case | ||
this.settings.ignoreHeaders = this.settings.ignoreHeaders.map(function(hdr) { | ||
return hdr.toLowerCase(); | ||
}); | ||
}; | ||
@@ -158,2 +165,17 @@ | ||
this.emit('proxy request', req, res); | ||
// The request module checks for `setHeader` method on pipes, and | ||
// populates the response headers automatically. This is probably | ||
// the most effecient way to control which headers get populated | ||
// without another pipe or not pipeing alltogether. | ||
var ignoreHeaders = this.settings.ignoreHeaders; | ||
if (ignoreHeaders.length) { | ||
var resSetHeader = res.setHeader; | ||
res.setHeader = function(hdr) { | ||
if (!~ignoreHeaders.indexOf(hdr.toLowerCase())) { | ||
return resSetHeader.apply(res, arguments); | ||
} | ||
}; | ||
} | ||
var proxy = this._proxy(req, uri, key); | ||
@@ -317,3 +339,3 @@ proxy.on('error', function(err) { | ||
response.statusCode, | ||
response.headers, | ||
this._omitHeaders(response.headers), | ||
body.toBuffer() | ||
@@ -330,2 +352,11 @@ ); | ||
/** | ||
* Returns an object ignoring the headers declared in `options.ignoreHeaders` | ||
* @param {Object} headers Incoming headers from proxy | ||
* @return {Object} | ||
*/ | ||
Middleman.prototype._omitHeaders = function(headers) { | ||
return omit(headers, this.settings.ignoreHeaders); | ||
}; | ||
/** | ||
* Determine whether a request should be cached. | ||
@@ -332,0 +363,0 @@ * @param {http.IncomingMessage} req Request |
{ | ||
"name": "middleman-proxy", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"author": "Nick Pisacane <pisacanen@gmail.com>", | ||
@@ -28,2 +28,3 @@ "description": "HTTP Proxy with content caching.", | ||
"bytes": "^2.1.0", | ||
"lodash.omit": "^3.1.0", | ||
"lru-cache": "^2.7.0", | ||
@@ -30,0 +31,0 @@ "object-assign": "^4.0.1", |
@@ -113,2 +113,13 @@ # Middleman | ||
### Ignoring Response Headers | ||
```js | ||
const Middleman = require('middleman-proxy'); | ||
const proxy = new Middleman({ | ||
target: 'http://some.api.com', | ||
ignoreHeaders: [ | ||
'X-Some-Header' | ||
] | ||
}); | ||
``` | ||
### Request Events | ||
@@ -138,2 +149,3 @@ ```js | ||
* setHeaders (Object) Headers to be sent with the request, when proxied. *Default* `{}` | ||
* ignoreHeaders (Array) Headers to be omitted from the proxy. *Default* `[]` | ||
* cacheMethods (String|Array<String>) HTTP Methods that should be cached for, | ||
@@ -140,0 +152,0 @@ does not cache for any omited. *Default* `'any'` |
@@ -34,2 +34,8 @@ var Middleman = require('../'); | ||
}); | ||
server.get('/ignoreHeaders', function(req, res) { | ||
res.setHeader('X-Foo', 'bar'); | ||
res.setHeader('X-Baz', 'bang'); | ||
res.json({}); | ||
}); | ||
server.listen(PROXY_PORT); | ||
@@ -721,2 +727,28 @@ | ||
it('should ignore headers', function(done) { | ||
var instance = SUITE.createInstance({ | ||
ignoreHeaders: [ | ||
'X-Foo' | ||
] | ||
}) | ||
.on('cache request', xCached); | ||
var agent = SUITE.agent; | ||
agent.get('/ignoreHeaders') | ||
.expect('X-Baz', 'bang') | ||
.end(function(err, res) { | ||
if (err) return done(err); | ||
should(res.headers['x-foo']).equal(undefined); | ||
should(res.headers['X-Foo']).equal(undefined); | ||
agent.get('/ignoreHeaders') | ||
.expect('X-Cached', 'true') | ||
.end(function(err, res) { | ||
if (err) return done(err); | ||
should(res.headers['x-foo']).equal(undefined); | ||
should(res.headers['X-Foo']).equal(undefined); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
describe('URI', function() { | ||
@@ -723,0 +755,0 @@ var target = 'http://test.io'; |
77212
2198
242
8
+ Addedlodash.omit@^3.1.0
+ Addedlodash._arraymap@3.0.0(transitive)
+ Addedlodash._basedifference@3.0.3(transitive)
+ Addedlodash._baseflatten@3.1.4(transitive)
+ Addedlodash._basefor@3.0.3(transitive)
+ Addedlodash._baseindexof@3.1.0(transitive)
+ Addedlodash._bindcallback@3.0.1(transitive)
+ Addedlodash._cacheindexof@3.0.2(transitive)
+ Addedlodash._createcache@3.1.2(transitive)
+ Addedlodash._getnative@3.9.1(transitive)
+ Addedlodash._pickbyarray@3.0.2(transitive)
+ Addedlodash._pickbycallback@3.0.0(transitive)
+ Addedlodash.isarguments@3.1.0(transitive)
+ Addedlodash.isarray@3.0.4(transitive)
+ Addedlodash.keysin@3.0.8(transitive)
+ Addedlodash.omit@3.1.0(transitive)
+ Addedlodash.restparam@3.6.1(transitive)