From 16ca6b5d987f1b9a812cbd041f24d9b0faa09864 Mon Sep 17 00:00:00 2001 From: gflizhiwen Date: Fri, 18 May 2018 13:44:18 +0800 Subject: [PATCH] [examples] Restream body before proxying, support for Content-Type of application/x-www-form-urlencoded --- examples/middleware/bodyDecoder-middleware.js | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/examples/middleware/bodyDecoder-middleware.js b/examples/middleware/bodyDecoder-middleware.js index 38559ef3b..71e16c8ac 100644 --- a/examples/middleware/bodyDecoder-middleware.js +++ b/examples/middleware/bodyDecoder-middleware.js @@ -29,6 +29,7 @@ var http = require('http'), request = require('request'), colors = require('colors'), util = require('util'), + queryString = require('querystring'), bodyParser = require('body-parser'), httpProxy = require('../../lib/http-proxy'), proxy = httpProxy.createProxyServer({}); @@ -36,12 +37,23 @@ var http = require('http'), //restream parsed body before proxying proxy.on('proxyReq', function(proxyReq, req, res, options) { - if(req.body) { - let bodyData = JSON.stringify(req.body); - // incase if content-type is application/x-www-form-urlencoded -> we need to change to application/json - proxyReq.setHeader('Content-Type','application/json'); + if (!req.body || !Object.keys(req.body).length) { + return; + } + + var contentType = proxyReq.getHeader('Content-Type'); + var bodyData; + + if (contentType === 'application/json') { + bodyData = JSON.stringify(req.body); + } + + if (contentType === 'application/x-www-form-urlencoded') { + bodyData = queryString.stringify(req.body); + } + + if (bodyData) { proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData)); - // stream the content proxyReq.write(bodyData); } }); @@ -94,5 +106,3 @@ http.createServer(app1).listen(9013, function(){ console.log('return for urlencoded request:' ,err, data) }) }); - -