I am trying to use node-http-proxy as a reverse proxy, but I cannot get POST and PUT requests to work. The server1.js file is the reverse proxy (at least for requests with the / forward-this URL), and server2.js is the server that receives the proxied requests. Please explain what I am doing wrong.
Here is the code for server1.js:
// File: server1.js // var http = require('http'); var httpProxy = require('http-proxy'); httpProxy.createServer(function (req, res, proxy) { if (req.method == 'POST' || req.method == 'PUT') { req.body = ''; req.addListener('data', function(chunk) { req.body += chunk; }); req.addListener('end', function() { processRequest(req, res, proxy); }); } else { processRequest(req, res, proxy); } }).listen(8080); function processRequest(req, res, proxy) { if (req.url == '/forward-this') { console.log(req.method + ": " + req.url + "=> I'm going to forward this."); proxy.proxyRequest(req, res, { host: 'localhost', port: 8855 }); } else { console.log(req.method + ": " + req.url + "=> I'm handling this."); res.writeHead(200, { "Content-Type": "text/plain" }); res.write("Server #1 responding to " + req.method + ": " + req.url + "\n"); res.end(); } }
And here is the code for server2.js:
// File: server2.js // var http = require('http'); http.createServer(function (req, res, proxy) { if (req.method == 'POST' || req.method == 'PUT') { req.body = ''; req.addListener('data', function(chunk) { req.body += chunk; }); req.addListener('end', function() { processRequest(req, res); }); } else { processRequest(req, res); } }).listen(8855); function processRequest(req, res) { console.log(req.method + ": " + req.url + "=> I'm handling this."); res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write("Server #2 responding to " + req.method + ': url=' + req.url + '\n'); res.end(); }
Jason roberts
source share