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);