Задать вопрос
@konfederation

Как обработать тело POST(DELETE, PUT) запроса на proxy сервере node.js перед отправкой на сервер?

Доброго времени суток. Есть proxy сервер на node.js, на котором перед отправкой запроса дальше, на какой-то url я обрабатываю тело запроса. Проблема в том, что когда я вызывают у объекта запроса (req) методы 'data', 'end' или 'readable' запрос дальше не проходит
function get_query_string(req, res){
    return new Promise(function (resolve, reject) {
        if (req.method === 'POST' || req.method === 'PUT' || req.method === 'DELETE') {
            var body = '';
            req.on('data', function (data) {
                body += data;
            });
           req.on('end', function () {
                resolve(query_string = body);
            });
            /*req.on('readable', () => {
                let body = '';
                let chunk = req.read();
                if(chunk === null){
                    resolve(query_string = body);
                }
                body += chunk;
            });*/
        } else if (req.method === 'GET') {
            resolve(query_string = req.url);
        }
    });
}

var server = http.createServer(function(req, res) {

    request_handler.check(req, res, signatures).then(
        result => {
            console.log(123);
            proxy.web(req, res, {
                changeOrigin: true,
                target: 'https://sumeurl',
                //selfHandleResponse : true,
                agent: new https.Agent({
                    port: 443,
                    key: fs.readFileSync(KEY),
                    cert: fs.readFileSync(CERT),
                }),
            });
    },
    error => {
        console.log(error);
    })

proxy.on('error', function(err){
    if (err.code === "ECONNRESET") {
        console.log("Timeout occurs");
        console.log(err);
    }
    else{
        console.log("Unknown error");
        console.log(err);
    }
});

console log:
123
Timeout occurs
Error: socket hang up
    at connResetException (internal/errors.js:575:14)
    at TLSSocket.socketCloseListener (_http_client.js:381:25)
    at TLSSocket.emit (events.js:215:7)
    at net.js:659:12
    at TCP.done (_tls_wrap.js:481:7) {
  code: 'ECONNRESET'
}

С GET запросом все работает норм. И да, мне необходимо сначала обработать тело запроса POST, а только потом посылать его дальше. В методе get_query_string() закомментирован эвент 'readable'. Я думал все дело в том, что эвент data заберает все из буффера потока и он остается пустой. readable срабатывает до end и req.read() заберает из буффера данные и кладет обратно. Но все равно не работало. В чем может быть дело? Почему запрос не проходит?
  • Вопрос задан
  • 494 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    Фулстек-разработчик
    16 месяцев
    Далее
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы