I've written a small proxy with nodejs, express and htt-proxy. It works well for serving local files but fails when it comes to proxy to external api:
var express = require('express'), app = express.createServer(), httpProxy = require('http-proxy'); app.use(express.bodyParser()); app.listen(process.env.PORT || 1235); var proxy = new httpProxy.RoutingProxy(); app.get('/', function(req, res) { res.sendfile(__dirname + '/index.html'); }); app.get('/js/*', function(req, res) { res.sendfile(__dirname + req.url); }); app.get('/css/*', function(req, res) { res.sendfile(__dirname + req.url); }); app.all('/*', function(req, res) { req.url = 'v1/public/yql?q=show%20tables&format=json&callback='; proxy.proxyRequest(req, res, { host: 'query.yahooapis.com', //yahoo is just an example to verify its not the apis fault port: 8080 }); });
The problem is that there is no response from the yahoo api, maybe there is an response but i dont came up in the browser.
express-http-proxy is the HTTP reverse proxy library.
Indicates the app is behind a front-facing proxy, and to use the X-Forwarded-* headers to determine the connection and the IP address of the client. NOTE: X-Forwarded-* headers are easily spoofed and the detected IP addresses are unreliable.
The http-proxy-middleware module does not return a promise, instead it returns an express middleware. You can use a custom filter to decide whether or not to proxy the request. You need to add the pathRewrite options in order to rewrite the url according to the current hostname.
Even simpler with pipe
and request
-Package
var request = require('request'); app.use('/api', function(req, res) { var url = apiUrl + req.url; req.pipe(request(url)).pipe(res); });
It pipes the whole request to the API and pipes the response back to the requestor. This also handles POST/PUT/DELETE and all other requests \o/
If you also care about query string you should pipe it as well
req.pipe(request({ qs:req.query, uri: url })).pipe(res);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With