mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
update modify request body eg
This commit is contained in:
parent
9577a0faf2
commit
04c45a022c
@ -29,91 +29,67 @@ var http = require('http'),
|
||||
request = require('request'),
|
||||
colors = require('colors'),
|
||||
util = require('util'),
|
||||
Store = require('../helpers/store'),
|
||||
bodyParser = require('body-parser'),
|
||||
httpProxy = require('../../lib/http-proxy'),
|
||||
proxy = httpProxy.createProxyServer({});
|
||||
|
||||
http.createServer(new Store().handler()).listen(7531, function () {
|
||||
util.puts('http '.blue + 'greetings '.green + 'server'.blue + ' started '.green.bold + 'on port '.blue + '7531'.yellow);
|
||||
//try these commands:
|
||||
// get index:
|
||||
// curl localhost:7531
|
||||
// []
|
||||
//
|
||||
// get a doc:
|
||||
// curl localhost:7531/foo
|
||||
// {"error":"not_found"}
|
||||
//
|
||||
// post an doc:
|
||||
// curl -X POST localhost:7531/foo -d '{"content": "hello", "type": "greeting"}'
|
||||
// {"ok":true}
|
||||
//
|
||||
// get index (now, not empty)
|
||||
// curl localhost:7531
|
||||
// ["/foo"]
|
||||
//
|
||||
// get doc
|
||||
// curl localhost:7531/foo
|
||||
// {"content": "hello", "type": "greeting"}
|
||||
|
||||
//
|
||||
// now, suppose we wanted to direct all objects where type == "greeting" to a different store
|
||||
// than where type == "insult"
|
||||
//
|
||||
// we can use connect connect-bodyDecoder and some custom logic to send insults to another Store.
|
||||
|
||||
//insult server:
|
||||
|
||||
http.createServer(new Store().handler()).listen(2600, function () {
|
||||
util.puts('http '.blue + 'insults '.red + 'server'.blue + ' started '.green.bold + 'on port '.blue + '2600'.yellow);
|
||||
|
||||
//greetings -> 7531, insults-> 2600
|
||||
|
||||
// now, start a proxy server.
|
||||
|
||||
//don't worry about incoming contont type
|
||||
//bodyParser.parse[''] = JSON.parse
|
||||
|
||||
connect.createServer(
|
||||
//refactor the body parser and re-streamer into a separate package
|
||||
connect.bodyParser(),
|
||||
//body parser absorbs the data and end events before passing control to the next
|
||||
// middleware. if we want to proxy it, we'll need to re-emit these events after
|
||||
//passing control to the middleware.
|
||||
require('connect-restreamer')(),
|
||||
function (req, res) {
|
||||
//if your posting an obect which contains type: "insult"
|
||||
//it will get redirected to port 2600.
|
||||
//normal get requests will go to 7531 nad will not return insults.
|
||||
var port = (req.body && req.body.type === 'insult' ? 2600 : 7531)
|
||||
proxy.web(req, res, { target: { host: 'localhost', port: port }});
|
||||
//restreame
|
||||
var restreamer = function (){
|
||||
return function (req, res, next) { //restreame
|
||||
req.removeAllListeners('data')
|
||||
req.removeAllListeners('end')
|
||||
next()
|
||||
process.nextTick(function () {
|
||||
rawBody = new Buffer(req.body)
|
||||
console.log('dsfgsdgsdgsdrtwergtsdgf', JSON.stringify(req.body).length)
|
||||
if(req.body) {
|
||||
req.emit('data', JSON.stringify(req.body))
|
||||
}
|
||||
).listen(1337, function () {
|
||||
util.puts('http proxy server'.blue + ' started '.green.bold + 'on port '.blue + '1337'.yellow);
|
||||
//bodyParser needs content-type set to application/json
|
||||
//if we use request, it will set automatically if we use the 'json:' field.
|
||||
function post (greeting, type) {
|
||||
request.post({
|
||||
url: 'http://localhost:1337/' + greeting,
|
||||
json: {content: greeting, type: type || "greeting"}
|
||||
})
|
||||
}
|
||||
post("hello")
|
||||
post("g'day")
|
||||
post("kiora")
|
||||
post("houdy")
|
||||
post("java", "insult")
|
||||
|
||||
//now, the insult should have been proxied to 2600
|
||||
|
||||
//curl localhost:2600
|
||||
//["/java"]
|
||||
|
||||
//but the greetings will be sent to 7531
|
||||
|
||||
//curl localhost:7531
|
||||
//["/hello","/g%27day","/kiora","/houdy"]
|
||||
|
||||
req.emit('end')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Basic Http Proxy Server
|
||||
//
|
||||
var app = connect()
|
||||
.use(bodyParser.json())//json
|
||||
.use(restreamer())//restreame
|
||||
.use(function(req, res){
|
||||
// modify body here,
|
||||
// eg: req.body = {a: 1}.
|
||||
console.log('proxy body:',req.body)
|
||||
proxy.web(req, res, {
|
||||
target: 'http://127.0.0.1:9013'
|
||||
})
|
||||
});
|
||||
|
||||
http.createServer(app).listen(8013, function(){
|
||||
console.log('proxy linsten 8013');
|
||||
});
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Target Http Server
|
||||
//
|
||||
var app1 = connect()
|
||||
.use(bodyParser.json())
|
||||
.use(function(req, res){
|
||||
console.log('app1:',req.body)
|
||||
res.end('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
|
||||
});
|
||||
http.createServer(app1).listen(9013, function(){
|
||||
//request to 8013 to proxy
|
||||
request.post({//
|
||||
url: 'http://127.0.0.1:8013',
|
||||
json: {content: 123, type: "greeting"}
|
||||
},function(err, res,data){
|
||||
console.log('return:' ,err, data)
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user