在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);