Ошибка при выполнении HTTP запроса. TCP/IP Socket error 104: Connection reset by peer

0 голосов
Андрей АВ назад в категории Ошибки
Добрый день.

У меня JS узел вызывает web service loginom, через несколько минут возникает ошибка "Ошибка при выполнении HTTP запроса. TCP/IP Socket error 104: Connection reset by peer"

С чем это может быть связано?

Код JS узла

import { InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType } from "builtIn/Data";

import { fetch, Request, Headers } from "builtIn/Fetch";

let url = InputVariables.Items[0].Value;

let json_data = InputTables[0].Get(0, 0);

// Создание объекта заголовков запроса:

let headers = new Headers({ "Content-Type": "application/json" })

// Функция для задержки

function delay(ms) {

    return new Promise(resolve => setTimeout(resolve, ms));

}

// Функция для выполнения запроса с повторами

async function fetchWithRetry(request, maxRetries = 5, retryDelay = 5000) {

    for (let attempt = 1; attempt <= maxRetries; attempt++) {

        try {

            console.log(`Попытка ${attempt} из ${maxRetries}`);

            let response = await fetch(request);

            

            // Если ответ успешный, возвращаем его

            if (response.ok) {

                return response;

            }

            

            // Если статус ошибки и это не последняя попытка, ждем и повторяем

            if (attempt < maxRetries) {

                console.log(`Ошибка статуса ${response.status}. Ожидание ${retryDelay}мс перед повтором...`);

                await delay(retryDelay);

            } else {

                // Последняя попытка - возвращаем ответ даже если ошибка

                return response;

            }

        } catch (e) {

            console.log(`Попытка ${attempt}: Ошибка - ${e.message}`);

            

            // Если это не последняя попытка, ждем и повторяем

            if (attempt < maxRetries) {

                console.log(`Ожидание ${retryDelay}мс перед повтором...`);

                await delay(retryDelay);

            } else {

                // Последняя попытка - выбрасываем ошибку

                throw e;

            }

        }

    }

}

// Создание объекта запроса:

let request = new Request(url, {

    method: "post",

    headers: headers,

    body: json_data,

    //timeout: 3000000

});

(async () => {

    try {

        // Выполняем запрос с повторами (5 попыток, 5 секунд между ними (5000 = 5 сек))

        let response = await fetchWithRetry(request, 5, 5000);

        //let response = await fetch(request);

        let response_text = await response.text();

        let response_status = response.status;

        

        let array = [];

        array.push({ Name: 'status', DisplayName: 'status', DataType: DataType.String, DefaultUsageType: UsageType.Active });

        array.push({ Name: 'response', DisplayName: 'response', DataType: DataType.String, DefaultUsageType: UsageType.Active });

        

        // Добавление массива столбцов

        OutputTable.AssignColumns(array);

        

        // Добавление строки в выходной набор данных

        OutputTable.Append();

        OutputTable.Set(0, response_status.toString());

        OutputTable.Set(1, response_text);

        

    } catch (e) {

        console.log("Ошибка:", e.message);

        

        // Добавьте обработку ошибки в OutputTable

        let array = [];

        array.push({ Name: 'status', DisplayName: 'status', DataType: DataType.String, DefaultUsageType: UsageType.Active });

        array.push({ Name: 'response', DisplayName: 'response', DataType: DataType.String, DefaultUsageType: UsageType.Active });

        OutputTable.AssignColumns(array);

        OutputTable.Append();

        OutputTable.Set(0, "error");

        OutputTable.Set(1, e.message);

    }

})();
...