在pipe道之前编辑响应标题

我有一个快速的特定请求的小代理。 使用请求库,我有相当简洁的代码:

app.use('/api', function(req, res) { var url = rewriteUrl(req.url); var newReq = request(url, function(error) { if (error) { logError(error); } }); req.pipe(newReq).pipe(res); }); 

我的问题是,从API服务器的响应包含一堆不想要的标题,我想要删除。 如何将newReq的响应消除头之前pipe道到res

有了request模块,目前没有办法(AFAIK)有一个callback,而不是缓冲服务器的响应。 所以这里是你如何使用内置的http.request来做到这http.request

 app.use('/api', function(req, res) { var url = rewriteUrl(req.url); var newReq = http.request(url, function(newRes) { var headers = newRes.headers; // modify `headers` here ... res.writeHead(newRes.statusCode, headers); newRes.pipe(res); }).on('error', function(err) { res.statusCode = 500; res.end(); }); req.pipe(newReq); }); 

mscdex的答案确实对我有用,但是我发现了一种我认为稍微干净的方法。 在我原来的代码中,我有这样的一行:

 req.pipe(newReq).pipe(res); 

我用这些行代替了:

 req.pipe(newReq).on('response', function(res) { delete res.headers['user-agent']; // ... }).pipe(res);