proxy-request
v0.1.4
Published
a proxy tool by request which damn convenient with stream pipe
Downloads
17
Maintainers
Readme
proxy-request
a proxy tool which damn convenient with stream pipe. also with 96% test coverage. inspired by request
features
- pipe http proxy
- modify response before pipe to destination stream
Install
npm i --save proxy-request
API
Method
proxy(request, [options, response])
- request:
http.IncomingMessage
instance or other instance of request. - options:
Object
, all options of 'request' library but 'callback', the url option is need. - options.modifyResponse:
Function(body)
,Optional
, modify response before pipe to destination stream. accept one argument which is the body of response. thethis
keyword is reference ofrequest.Request
instance. the return value will be the new content of response. - response:
Optional
, writable stream, like http.ServerResponse instance.
Usage
Normal Proxy
const proxy = require('proxy');
const http = require('http');
// http useage
http.createServer((req, res) => {
proxy(req, {url: `http://www.google.com${req.url}`}, res)
.then(request => {
request.on('response', (response) => {
// A chance to change response headers before pipe
response.headers.test = 'test';
});
});
}).listen(8000);
// koa middleware
function* koaProxy(next) {
const req = yield proxy(this.req, {url: `http://www.google.com${this.req.url}`});
// run koa middlewares after response event executed
yield function(done) {
req.on('response', function(response) {
// A chance to change response headers before pipe
this.headers = response.headers;
done();
});
}
this.body = req;
}
Modify Reponse Before Pipe
Some times we want modify the response of the backend services. you can define a function as options.modifyResponse
.
const proxy = require('proxy');
const http = require('http');
// http useage
http.createServer((req, res) => {
proxy(req, {
url: `http://www.google.com${req.url}`,
modifyResponse(response) {
// change headers
response.headers['content-type'] = 'application/json; charset: utf8';
// use new content, can be string, buffer, null, undefined or object;
response.body = JSON.stringify({content: body});
}
}, res)
.then(request => {
request.on('response', (response) => {
// A chance to change response headers before pipe
response.headers.test = 'test';
});
});
}).listen(8000);
Develop
$> npm i
$> npm test
$> npm publish
Release Note
v0.1.3 2016-09-22
* catch some errors and reject them
v0.1.2 2016-09-17
* modifyResponse can set response.body to object, null and undefined.
v0.1.1 2016-09-17
* fix some bugs in koa flow.
v0.1.0 2016-09-12
* first version