У меня есть маршрут, который передает запрос на другой 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();
});
});