Поток преобразования запроса прокси-сервера Express.js приводит к исчезновению заголовков ответа - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть маршрут, который передает запрос на другой 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();
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...