2016-08-06 41 views
1

我用快遞4,和我使用的是中間件http-proxy-middlewarehttps://github.com/chimurai/http-proxy-middleware),並具有下列問題節點HTTP代理/ HTTP代理中間件 - 你如何操縱代理響應

在正常這樣,我可以做以下返回給客戶端之前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); 
    }); 
}); 

但我怎麼執行自定義邏輯,如果我使用代理服務器,比方說,我想回應前處理一些數據客戶端?這個中間件有沒有好的模式?

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

這裏是我放在GitHub上還有問題的反向鏈接 - https://github.com/chimurai/http-proxy-middleware/issues/97

任何幫助,將不勝感激。

+0

輸出其實使用這個幫助https://github.com/langjt/node-http-proxy-json 但目前它只支持「gzip」和「deflate」作爲它的內容類型。 –

回答

0

這裏就是我的回答,

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) {} 
     } 
    } 

上的HTTP代理中間件 添加onProxyRes選項使用的proxyRes數據事件獲得輸出 然後修改res.write

+0

這難道不好嗎?您正在res對象上重新定義寫入方法? – ortonomy