Nodejs node-http-proxy setup with cache

I am trying to setup a node-http-proxy module with node-http-proxy module caching . I was able to set up node-http-proxy to do what I need to do in terms of proxying calls, but I would like to find a way to cache some of these calls.

My current code looks like this (incorrect loading skipped):

var http = require('http');
var https = require('https');
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
var fs = require('fs');

var handler = function(req, res) {
    proxy.web(req, res, {target: 'http://localhost:9000'});
};

var server = http.createServer(handler).listen(config.children.http.port, function() {
    console.log('Listening on port %d', server.address().port);
});

var secure = https.createServer(config.children.https.options, handler).listen(config.children.https.port, function() {
    console.log('Listening on port %d', secure.address().port);
});

      

Inside the handler function, I would like to somehow grab what the proxy is reading from "target" and pass it to fs.createWriteStream ('/ somepath') before passing it to res. Then I would change my function to look at something along the line:

var handler = function(req, res) {
    var path = '/somepath';
    fs.exists(path, function(exists) {
        if(exists) {
            console.log('is file');
            fs.createReadStream(path).pipe(res);
        } else {
            console.log('proxying');
            // Here I need to find a way to write into path
            proxy.web(req, res, {target: 'http://localhost:9000'});
        }
    });
};

      

Does anyone know how to do this?

+3


source to share


1 answer


The answer to the question turned out to be very simple:



var handler = function(req, res, next) {

    var path = '/tmp/file';
    fs.exists(path, function(exists) {
        if(exists) {
            fs.createReadStream(path).pipe(res);
        } else {
            proxy.on('proxyRes', function(proxyRes, req, res) {
                proxyRes.pipe(fs.createWriteStream(path));
            });
            proxy.web(req, res, {target: 'http://localhost:9000'});         
        }
    });
};

      

+5


source







All Articles