Search code examples
javascripthttpnode.jshttp-proxynode-http-proxy

How do I use node.js http-proxy for logging HTTP traffic in a computer?


I am trying to implement the simplest example:

var http = require('http'),
var httpProxy = require('http-proxy');

httpProxy.createServer(function (req, res, proxy) {
    //
    // I would add logging here
    //
    proxy.proxyRequest(req, res, { host: 'www.google.com', port: 80 });
}).listen(18000);

When I configure my browser to use this proxy and I navigate to www.google.com I receive no response. What is that I am doing wrong?

I'm using Windows 7 Chrome


Solution

  • Here is an simple example how to log requests. I use a similar to log all my domains to one database.

    I copied much from http://blog.nodejitsu.com/http-proxy-middlewares (archived)

    var fs = require('fs'),
        http = require('http'),
        httpProxy = require('http-proxy'),
            
    logger = function() {    
      // This will only run once
      var logFile = fs.createWriteStream('./requests.log');
    
      return function (request, response, next) { 
        // This will run on each request.
        logFile.write(JSON.stringify(request.headers, true, 2));
        next();
      }
    }
    
    httpProxy.createServer(
      logger(), // <-- Here is all the magic
      {
        hostnameOnly: true,
        router: {
          'example1.com': '127.0.0.1:8001', // server on localhost:8001
          'example2.com': '127.0.0.1:8002'  // server 2 on localhost:8002
      }
    }).listen(8000);