0.1.4 • Published 9 years ago
proxy-request v0.1.4
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-requestAPI
Method
proxy(request, options, response)
- request:
http.IncomingMessageinstance 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. thethiskeyword is reference ofrequest.Requestinstance. 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 publishRelease Note
v0.1.3 2016-09-22
* catch some errors and reject themv0.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