guumaster
3/26/2016 - 3:07 PM

Transform JSON response after proxy-ing

Transform JSON response after proxy-ing

var http = require('http');
var express = require('express');
var httpProxy = require('http-proxy');
var transformerProxy = require('transformer-proxy');

var app = express();
var proxy = httpProxy.createProxyServer({});

var transformerFunction = function (data, req, res) {
  // you can't set any headers here because they are already sent.
  console.log('onTransformer sent?', res.headersSent);
  return new Promise(function(resolve, reject) {

        var body = JSON.parse(data.toString());
        console.log('body', body);
        body.push({id:1999, name: 'jodete'});
  console.log('onTransformer sent?', res.headersSent);

       resolve(JSON.stringify(body));

  });
};

proxy.on('proxyReq', function(proxyReq, req, res, options) {
  proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
  console.log('new header set', res.headersSent);
});

proxy.on('proxyRes', function (proxyRes, req, res) {
  console.log('RAW Response from the target', JSON.stringify(proxyRes.headers, true, 2));
  res.setHeader('X-toma-HEADER', '3000000');
  console.log('onProxyRes sent?', res.headersSent);
});

app.use(transformerProxy(transformerFunction));

app.use(function(req, res) {
  console.log('proxying', req.url);
  proxy.web(req, res, {
    target: 'http://127.0.0.1:3000'
  });
});

console.log("listening on port 4000")
app.listen(4000);