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