2016-08-06 41 views
1

Ich verwende Express 4, und ich bin mit einem Middleware http-proxy-middleware (https://github.com/chimurai/http-proxy-middleware) und mit den folgenden ThemenKnoten http-Proxy/HTTP-Proxy-Middleware - Wie manipulieren Sie Proxy-Antwort

Im Normal So kann ich die im Anschluss an die Reaktion vor der Rückkehr an den Client manupulate

app.get('/v1/users/:username', function(request, response, next) { 
    var username = request.params.username; 
    findUserByUsername(username, function(error, user) { 
     if (error) return next(error); 
     return response.render('user', user); 
    }); 
}); 

Aber wie führe ich eine benutzerdefinierte Logik, wenn ich Proxy bin mit, sagen wir, ich möchte einen Teil der Daten manipulieren, bevor Reaktion auf der Kunde? Gibt es ein gutes Muster, um das mit dieser Middleware zu tun? Hier

app.use('/api', proxy({target: 'http://www.example.org', changeOrigin: true})); 

ist der Backlink für die Frage, die ich auch in Github setzen - https://github.com/chimurai/http-proxy-middleware/issues/97

Jede Hilfe würde geschätzt.

+0

zu erhalten Tatsächlich mit dieser Hilfe https://github.com/langjt/node-http-proxy-json Aber derzeit unterstützt nur "gzip" und "deflate" als Inhaltstyp. –

Antwort

0

hier ist meine Antwort,

onProxyRes :function(proxyRes, req, res){ 
     var _write = res.write; 
     var output; 
     var body = ""; 
     proxyRes.on('data', function(data) { 
      data = data.toString('utf-8'); 
      body += data; 
     }); 
     res.write = function (data) { 
     try{ 
/*** something detect if data is all download.my data is json,so I can do by this***/ 
      eval("output="+body) 
      output = mock.mock(output) 
      _write.call(res,JSON.stringify(output)); 
     } catch (err) {} 
     } 
    } 

onProxyRes Option auf der http-Proxy-Middleware die Daten Ereignis verwenden, um auf dem proxyRes fügen Sie den Ausgang ändern Sie dann die Ausgabe in res.write

+0

Ist das nicht irgendwie hacky? Sie definieren die Schreibmethode für das res-Objekt neu? – ortonomy