对于Express中的某些请求,我有一个小代理.使用请求库,我有相当简洁的代码:
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);
});
Run Code Online (Sandbox Code Playgroud)
我的问题是来自API服务器的响应包含一堆我想要删除的不需要的标头.如何在将其汇总到newReq之前从响应中删除标题res?
GJK*_*GJK 59
mscdex的答案确实对我有用,但我找到了一种方式,我觉得它稍微清洁一点.在我的原始代码中,我有这一行:
req.pipe(newReq).pipe(res);
Run Code Online (Sandbox Code Playgroud)
我用这些代替了它:
req.pipe(newReq).on('response', function(res) {
delete res.headers['user-agent'];
// ...
}).pipe(res);
Run Code Online (Sandbox Code Playgroud)
msc*_*dex 15
使用该request模块,目前没有办法(AFAIK)进行回调而不缓冲服务器响应.所以这里有你如何用内置的方法做到这一点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);
});
Run Code Online (Sandbox Code Playgroud)
请求很容易。
request("https://example.com/image.png")
.on("response", remoteRes => {
// You can add/remove/modify headers here
remoteRes.headers["content-disposition"] = "attachment; filename=awesome.png";
})
.pipe(res);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14343 次 |
| 最近记录: |