我有一条将请求代理到另一个URL的路由,但是我想在返回数据时进行转换(查找/替换)。因此有些奇怪的原因,当请求通过转换流进行管道传输时,它会丢失所有响应HTTP标头。知道如何保存吗?
router.get('*', function (req, res) {
let proxyUri = // generate some url
const ws = stream.Writable();
ws._write = function (chunk, enc, next) {
let fragment = chunk.toString();
// Inject config json at the end of <head>
if (fragment.indexOf('</head>') !== -1) {
const configJson = JSON.stringify({
apiBasePath: RELATIVE_PATH
});
fragment = fragment.replace('</head>', `<script>var config = ${configJson}</script></head>`);
}
res.write(fragment);
return next();
};
// Proxy request
return request({ uri: proxyUri })
.on('error', function(err) {
error('request:error', err);
return res.status(500).send();
})
.pipe(ws)
.on('finish', () => {
res.end();
});
});
我也尝试过使用类似的转换流npm包(https://github.com/eugeneware/replacestream),它也剥离了HTTP响应标头。
router.get('*', function (req, res) {
let proxyUri = // generate some url
// Proxy request
return request({ uri: proxyUri })
.on('error', function(err) {
error('request:error', err);
return res.status(500).send();
})
.pipe(replaceStream('</head>', `<script></script></head>`))
.pipe(res)
.on('finish', () => {
res.end();
});
});