NodeJS Telegram bot request failed API

262
20 апреля 2022, 12:50

Бот перестает работать после ошибки:

FetchError: request to https://domain.ru/api/get/token failed, reason: connect ETIMEDOUT ip:443
    at ClientRequest.<anonymous> (/home/user/bot/node_modules/node-fetch/lib/index.js:1461:11)
    at ClientRequest.emit (events.js:315:20)
    at TLSSocket.socketErrorListener (_http_client.js:426:9)
    at TLSSocket.emit (events.js:315:20)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  type: 'system',
  errno: 'ETIMEDOUT',
  code: 'ETIMEDOUT'
}

NodeJS

async function getToken(ctx) {
  let message = '';
  await loadData(`api/get/token`, { tg_id: ctx.from.id })
    .then((res) => {
      if (typeof res === 'object') {
        if (res.message === null) {
          ctx.replyWithMarkdown('*Message*');
        } else {
          res.error.code === 0 ? (message = `*${res.message}*`) : (message = res.message);
          ctx.replyWithMarkdown(message);
        }
      }
    })
    .catch((error) => {
      console.log(error);
    });
}

PHP

$query = $db::sendQuery("SELECT `user_id` FROM `users_tg` WHERE `tg_id` = ?",array($tg_id));
    if($query->rowCount() == 1){
       $user_id = $query->fetchObject()->user_id;
       $token= $db->fetchObj("SELECT `token` FROM `tokens` WHERE `user_id` = $user_id")->token;
       return setStatus(0,$token); // echo json_encode(['code' => 0, 'message' = 'текст']);
    } else {
      return setStatus(410,'Вы ещё не привязали аккаунт telegram');
    }

По началу все работает успешно через некоторое время падает. Не понимаю в чем проблема. Иногда бот отлагивает, но не надолго и так всегда.

Answer 1

Что присходит?

Ошибка ETIMEDOUT вам говорит о том, что ответ не был получен в пределах заданного времени.

Если изначально всё работает нормально, то могу предположить, что в какой-то момент сервер перестаёт справляться с нагрузкой и отдаёт ответ слишком долго, как следствие бот падает, нагрузка тоже и всё начинается заного.

Как решить?

Нужно, внезапно, посмотреть что вызывает большую нагрузку и постараться устранить это. Так же есть смысл проверить есть ли индексы на столбцах по которым идёт выборка и нет ли каких-то других банальных ошибок

Решение в лоб

Выставляем время ожидания ответа больше и ждём до тех пор пока сервер не ответит. Но есть шанс, что в таком случае, уже php сторона будет отваливаться с 50Х ошибкой из-за превышения времени выполнения.

READ ALSO
Группировка товаров по ID в корзине

Группировка товаров по ID в корзине

Подскажите, пожалуйста, как сгруппировать одинаковые товары в корзине? Необходимо сделать так, чтобы одинаковый товар (c тем же id) при добавлении...

85
Объясните в чем разница

Объясните в чем разница

В гайде использовался этот кусок кода:

157
Не работает ajax подгрузка постов WordPress

Не работает ajax подгрузка постов WordPress

Есть страничка постов с табами для каждой категории, выглядит это так:

98