Ошибка: ESOCKETTIMEDOUT, но, похоже, не является DNS, как предлагают другие сообщения SO - PullRequest
0 голосов
/ 10 марта 2019

У меня возникли некоторые проблемы с пакетом npm request, и я заставил его правильно вызывать любой URL-адрес, если он не относится к выключенному серверу.Например, я не могу вызвать amazon.com, но я могу вызвать dev.personalDomain.com, который указывает на полностью отключенный экземпляр EC2.

Я попытался вырезать логику приложения, чтобы сделать так, чтобы просто ошибка

Для этого примера предположим, что monitor.body.url = 'amazon.com' является строкой

Мой код

request({url: `http://${monitor.body.url}`, timeout: 20}, function (error, response, body) {
    console.log(`Response: ${response}`);
    console.log(`Body: ${body}`);
    console.log(`Error: ${error}`);
    if(error == 'ENOTFOUND' || error == 'ETIMEDOUT') {
      response.statusCode = 500;
  }
  if(error || response.statusCode < 200 && response.statusCode > 299 || !response.statusCode) {
    if(!response || !response.statusCode)  response.statusCode = 500;

    // Application logic

  }
  // If nothing went wrong just console.log -- This is used for debugging not useful in prod
  if(!error || response.statusCode > 299 || response.statusCode < 200)console.log(`Successfully called ${monitor.body.url}`);

});

Сообщение об ошибке

Response: undefined
Body: undefined
Error: Error: ESOCKETTIMEDOUT
/home/ec2-user/environment/service/app.js:91
          if(!response || !response.statusCode)  response.statusCode = 500;
                                                                     ^

TypeError: Cannot set property 'statusCode' of undefined

Я посмотрел на Google / SO и обнаружил, что это может быть DNS, вызывающий проблему, и для тестирования / решения, которое я использую:

const dns = require("dns");
dns.setServers(['8.8.8.8', '1.1.1.1']);

Это не изменилорезультат запроса сверху.

У кого-нибудь есть предложение или идея о том, что это может быть?Мне не повезло найти пример, который близок и выдает то же сообщение об ошибке.

РЕДАКТИРОВАТЬ **

Мой DNS отлично работает на моей машине, так что проблем там нет.Кроме того, у меня не было этой проблемы, когда у меня было только request({'http://${monitor.body.url}', function (error, response, body) {, так что похоже на ошибку с тем, как я использую запрос

1 Ответ

1 голос
/ 10 марта 2019

Разобрался с проблемой. Мое редактирование дает и представление о том, что это может быть ... Так что время ожидания, которое я использую с запросом, на самом деле в миллисекундах, а не секундах, как я и думал. Таким образом, истекло время ожидания через 20 миллисекунд, что привело к ошибке, когда даже DNS не завершал работу должным образом. Я изменил его на 20 секунд, и проблема, похоже, решена.

...