Продолжайте зависание сокета при использовании node-fetch - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь получить URL-адрес, чтобы получить заголовки и убедиться, что он возвращает тип содержимого, чтобы я мог проверить, содержит ли он «изображение».

Пока я просто просматриваю база данных, чтобы получить URL-адреса изображений для передачи в выборку для получения типа содержимого.

Доходит до этого, а затем возникает ошибка зависания сокета.

вот функция, которую я вызываю

const getImage = async (url) => {
  try {
    const res = await fetch(encodeURI(url));
    console.log(res.headers.get("content-type"));
  } catch (err) {
    console.log(err);
  }
};

однако через некоторое время он начинает выдавать ошибки, и node -fetch выдает следующую ошибку:

FetchError: request to http://www.fakeurl/image.jpg failed, reason: socket hang up
at ClientRequest.<anonymous> (/home/user/code/url-check/node_modules/node-fetch/lib/index.js:1455:11)
    at ClientRequest.emit (events.js:321:20)
    at Socket.socketOnEnd (_http_client.js:463:9)
    at Socket.emit (events.js:333:22)
    at endReadableNT (_stream_readable.js:1201:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {

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

edit

вот база данных l oop, которая вызывает функцию выше :

connection.query(sql, (error, results, fields) => {
  if (error) {
    return console.error(error.message);
  }

  for (let i = 0; i < results.length; i++) {
    getImage(results[i].image_url);
  }
});

connection.end();

1 Ответ

1 голос
/ 09 июля 2020

Это может происходить по двум причинам:

  • Сервер все еще обрабатывает предыдущий запрос
  • Вы не закрывали порт после каждого вызова

Что, я думаю, вам следует сделать:

  • Закройте порт после того, как каждый запрос будет удовлетворен из БД.
  • Найдите, есть ли у вашего провайдера БД возможность getBatch ( ), который вы отправляете в БД сразу все, что хотите, и он отправляет их вам одним ответом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...