Не удается поймать ошибку зависания сокета запроса, который приводит к сбою сервера узла - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть сервер парусов, который действует как прокси (дляasticsearch).Клиентский сервер (kibana) имеет время ожидания запроса 30 с, когда он вызывает длинный запрос к прокси, который занимает около 50 с, время ожидания истекает, но возникает ошибка socket hang up на сервере, и он падает.

Я могуувеличить время ожидания клиента (что я не считаю лучшим), но как отловить эту ошибку?

Код прокси выглядит следующим образом:

const request = require('request');

function proxyRequest(req, res, esUrl) {
  let esReq = request({
    url: esUrl,
    method: req.method
  });
  esReq.on('error', function handleError(err) {
    console.log('Got error', err);
    res.json(500, {
      error: err
    });
  });

  return req.pipe(esReq).pipe(res);
}

Выше error прослушиватель событий включен esReq не перехватывает ошибку, я пытался добавить слушателей на req и res, но не работает.

Вся ошибка:

Error: socket hang up
at createHangUpError (_http_client.js:253:15)
at Socket.socketOnEnd (_http_client.js:345:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)

Какпоймать эту ошибку и обработать ее?

1 Ответ

0 голосов
/ 25 февраля 2019

Решение прослушать событие error было правильным.В моем случае запросы дважды передавались в двух разных местах, и в одном месте не было прослушивателя ошибок, и именно там происходил сбой сервера.После того, как это выяснилось, просто добавилось прослушивание ошибок, как описано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...