@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() заберает из буффера данные и кладет обратно. Но все равно не работало. В чем может быть дело? Почему запрос не проходит?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы