Медленная запись в базу данных

делаю считывание строк из файла, и опрос на статус код, тобишь на доступность сайта и статус коды, 200, 301 и т.д (все), но запись идет очень медленно, что я делаю не так и как можно ускорить? Пример кода прикладываю.

app.post("/api/files/send", function (req, res) {
console.log("SEND")
if (upload)
    return res.send(JSON.stringify({ alert: "Downloaded Filed: Upload already in progress!" }))

if (!req.body.text || req.body.text == "")
    return res.send(JSON.stringify({ alert: "Downloaded Filed: File is empty!" }))

upload = true
for (var i = 0; i < req.body.text.split('\n').length; i++) {
    survey(req.body.text.split('\n')[i])
}
upload = null })

async function survey(line) {
var url = line.substring(0, line.toLowerCase().indexOf(".ru") + 3)
try {
    const response = await axios.get("http://" + encodeURIComponent(url) + "/");
    if (response.status == 200) {
        if (response.request.res.responseUrl.indexOf(url.toLowerCase()) != -1) {
            data.querySet("call insertSite('" + url + "','" + response.status + "','" + response.statusText + "')")
        }
        else {
            data.querySet("call insertSite('" + url + "','301','')")
        }
    }
    else {
        data.querySet("call insertSite('" + url + "','" + response.status + "','" + response.statusText + "')")
    }
} catch (error) {
    data.querySet("call insertSite('" + url + "','" + (((error || {}).response || {}).status || "n/a") + "','" + (((error || {}).response || {}).statusText && (((error || {}).response || {}).statusText.indexOf("Unknown column") != -1) && "SQL Error" || error.code) + "')")
}}

const mysqlPromise = require("mysql2/promise")
connectionPromise = mysqlPromise.createPool({
connectionLimit:  100,
host: host || "127.0.0.1",
port: port || 3306,
database: database,
user: user || "root",
password: password || ""})

module.exports.querySet = async function (sql) {
try {
    let rows = await connectionPromise.execute(
        sql,
    );
    return console.log("Data added succesfully!")
} catch (error) {
    console.log(error);
}}


Ответы (1 шт):

Автор решения: nörbörnën

Вот вам наколеночный вариант краулера на чистых node:httpnode:https).

С вашей выборкой в 200 хостов он справляется за 11 секунд, если проверять только http, и за 12 секунд, если проверять http и https.

Вся фишка в:

  1. Использование node:http. Я не загружаю текст страницы, для принятия решения достаточно заголовков ответа сервера.

  2. Использование yandex в качестве dns resolver. Яндекс близко, экономим время на ожидании ответа. Но если вы находитесь не в России то стоит подобрать самый близкий dns resolver или прописать dns google/cloudflare.

  3. Использование таймаутов. Не заморачиваемся ожиданием ответа дольше нескольких секунд. Но если скорость вашего соединения маловата то таймеры следует увеличить.

  4. Обращения к хостам запараллелены в локальной очереди p-queue на 20 потоков.

// @ts-check
import { Resolver } from 'node:dns';
import http from 'node:http';
import https from 'node:https';
import { setTimeout } from 'timers/promises';
import fakeAgent from 'fake-useragent';
import PQueue from 'p-queue';

const resolver = new Resolver();
resolver.setServers([
  // yandex
  '77.88.8.8',
  '77.88.8.1',
  '2a02:6b8::feed:0ff',
  '2a02:6b8:0:1::feed:0ff',
]);

const agent = {
  /**
   * @param {string} url
   */
  get(url) {
    return url.startsWith('https')
      ? this.https(url)
      : this.http(url);
  },
  /**
   * @param {string} url
   * @returns {Promise<
   *  { status: number | undefined; statusText: string | undefined; headers: http.IncomingHttpHeaders; }
   *  | Error
   * >}
   */
  http(url) {
    return new Promise((resolve, reject) => {
      const request = http.get(
        url,
        {
          family: 4,
          timeout: 4500,
          maxHeaderSize: 64000,
          headers: {
            'User-Agent': fakeAgent(),
          },
          lookup: (hostname, options, callback) =>
            resolver.resolve4(hostname, (err, addresses) => callback(err, addresses?.[0], 4)),
        },
        (res) => {
          const { statusCode: status, statusMessage: statusText, headers } = res;
          resolve({ status, statusText, headers });
        })
        .on('error', reject)
        .on('timeout', () => {
          reject(new Error('TIMEDOUT'));
          request.destroy();
        });
    });
  },
  /**
   * @param {string} url
   * @returns {Promise<
   *  { status: number | undefined; statusText: string | undefined; headers: http.IncomingHttpHeaders; }
   *  | Error
   * >}
   */
  https(url) {
    return new Promise((resolve, reject) => {
      const request = https.get(
        url,
        {
          family: 4,
          rejectUnauthorized: true,
          timeout: 4500,
          maxHeaderSize: 64000,
          headers: {
            'User-Agent': fakeAgent(),
          },
          lookup: (hostname, options, callback) =>
            resolver.resolve4(hostname, (err, addresses) => callback(err, addresses?.[0], 4)),
        },
        (res) => {
          const { statusCode: status, statusMessage: statusText, headers } = res;
          resolve({ status, statusText, headers });
        })
        .on('error', reject)
        .on('timeout', () => {
          reject(new Error('TIMEDOUT'));
          request.destroy();
        });
    });
  },
};
const crawlerTasksQueue = new PQueue({
  concurrency: 1,
});
const crawlerQueue = new PQueue({
  concurrency: 20,
});

/**
 * @param {string} text
 * @returns {Promise<void>}
 */
 async function handleInputData(text) {
  let lines = text.split(/\n/).map((x) => {
    return x?.trim().split(/\s+/).shift();
  }).filter((x) => x !== undefined && x !== null && /\S/.test(x));
  lines = [...new Set(lines)];
  return handleHosts(lines);
}

/**
 * @param {string[]} lines
 * @returns {Promise<void>}
 */
async function handleHosts(lines) {
  await crawlerQueue.addAll(
    lines.map((hostname) => async () => {
      const { status, statusText, error } = await fetchWebSite(hostname);
      await querySet(
        hostname,
        status,
        error ?? statusText,
      );
      return { url: hostname, status, statusText, error };
    }),
  );
  console.log(`[done] lines=${lines.length}`);
}

/**
 * @param {string} hostname
 * @returns {Promise<
 *    { status: number | string; statusText?: string; }
 *  | { status?: number | string; error: string | Error; }
 * >}
 */
async function fetchWebSite(hostname) {
  try {
    let allRes = await Promise.allSettled([
      agent.get(`http://${hostname}/`),
      agent.get(`http://www.${hostname}`),
      // agent.get(`https://${hostname}`),
      // agent.get(`https://www.${hostname}`),
    ]);
    const res = allRes.find((x) => x.status === 'fulfilled');
    if (res) {
      const { status, statusText } = res.value;
      return { status, statusText };
    } else {
      throw allRes.shift().reason;
    }
  } catch (err) {
    return {
      status: err.status,
      error: err.statusText || err.message,
    };
  }
}

/**
 * @param {string} url
 * @param {string | number} [status='n/a']
 * @param {string} [statusText='SOMETHIND_WRONG']
 * @returns {Promise<void>}
 */
async function querySet(
  url,
  status = 'n/a',
  statusText = 'SOMETHIND_WRONG',
) {
  // await data.querySet(`call insertSite('${url}','${status}','${statusText}')`);
  await setTimeout(200 * Math.random());
  console.log(`call insertSite('${url}','${status}','${statusText}')`);
}

(async () => {
  const text = `0--0----------------------------------------------------------0.RU  REGRU-RU    18.11.2015  18.11.2022  19.12.2022  1
  0--0----------------------------------------------------LOGOPOD.RU    AXELNAME-RU 15.02.2022  15.02.2023  18.03.2023  1
  0--0----------------------------------------------------WDOMAIN.RU    AXELNAME-RU 10.06.2022  10.06.2023  11.07.2023  1
  0--0---------------------------------------------------AXELNAME.RU    AXELNAME-RU 24.03.2017  24.03.2023  24.04.2023  1
  0--0--------DRA-DOT-RU-PREMIUM-DOMAINS-AND-SERVICES-----------0.RU    REGRU-RU    24.03.2011  24.03.2023  24.04.2023  1
  0--0-0.RU REGRU-RU    17.04.2017  17.04.2023  18.05.2023  1
  0--0-HOSTING-OBZOR--HOSTING-OBZOR--HOSTING-OBZOR--HOSTING-OBZOR.RU    REGTIME-RU  09.11.2009  09.11.2022  10.12.2022  1
  0--0.RU   REGRU-RU    20.10.2017  20.10.2022  20.11.2022  1
  0--1.RU   REGRU-RU    12.10.2021  12.10.2022  12.11.2022  1
  0--3.RU   REGTIME-RU  30.06.2017  30.06.2023  31.07.2023  1
  0--5.RU   R01-RU  01.01.2021  01.01.2023  01.02.2023  1
  0--9.RU   REGTIME-RU  30.06.2017  30.06.2023  31.07.2023  1
  0-0-0.RU  R01-RU  15.05.2007  15.05.2023  15.06.2023  1
  0-0-1.RU  R01-RU  28.08.2015  28.08.2023  28.09.2023  1
  0-0-12.RU REGRU-RU    20.02.2019  20.02.2023  23.03.2023  1
  0-0-24.RU REGRU-RU    18.01.2022  18.01.2023  18.02.2023  0
  0-0-7.RU  REGRU-RU    30.06.2022  30.06.2023  31.07.2023  1
  0-0.RU    R01-RU  02.03.2000  01.04.2023  02.05.2023  1
  0-00.RU   REGRU-RU    01.12.2017  01.12.2022  01.01.2023  1
  0-000.RU  REGRU-RU    11.03.2019  11.03.2023  11.04.2023  1
  0-01.RU   RU-CENTER-RU    29.10.2010  29.10.2022  29.11.2022  1
  0-02.RU   BEGET-RU    05.03.2020  05.03.2023  05.04.2023  1
  0-03.RU   R01-RU  06.06.2017  06.06.2023  07.07.2023  1
  0-04.RU   TIMEWEB-RU  17.06.2021  17.06.2022  18.07.2022  1
  0-05.RU   REGRU-RU    19.10.2021  19.10.2022  19.11.2022  1
  0-07.RU   REGRU-RU    25.08.2021  25.08.2022  25.09.2022  1
  0-1-0.RU  REGRU-RU    10.05.2014  10.05.2023  10.06.2023  1
  0-1-2-3.RU    REGRU-RU    03.09.2016  03.09.2022  04.10.2022  1
  0-1-2.RU  REGRU-RU    05.09.2008  05.09.2022  06.10.2022  1
  0-1.RU    RU-CENTER-RU    22.03.2000  01.04.2023  02.05.2023  1
  0-10.RU   REGRU-RU    16.11.2021  16.11.2022  17.12.2022  1
  0-100.RU  RU-CENTER-RU    17.07.2008  17.07.2022  17.08.2022  0
  0-1000V.RU    REGRU-RU    15.02.2011  15.02.2023  18.03.2023  0
  0-1000VOLT.RU RU-CENTER-RU    04.01.2014  04.01.2023  04.02.2023  0
  0-100KM.RU    REGRU-RU    21.07.2020  21.07.2022  21.08.2022  1
  0-100KMH.RU   RD-RU   21.03.2015  21.03.2023  21.04.2023  0
  0-11.RU   REGTIME-RU  08.11.2020  08.11.2022  09.12.2022  1
  0-111.RU  REGRU-RU    29.06.2021  29.06.2022  30.07.2022  1
  0-12.RU   RU-CENTER-RU    16.07.2014  16.07.2022  16.08.2022  1
  0-13.RU   REGRU-RU    26.09.2010  26.09.2022  27.10.2022  1
  0-14.RU   TIMEWEB-RU  18.06.2021  18.06.2022  19.07.2022  1
  0-15.RU   REGRU-RU    14.04.2021  14.04.2023  15.05.2023  1
  0-16.RU   R01-RU  16.03.2017  16.03.2023  16.04.2023  1
  0-17.RU   REGRU-RU    03.11.2021  03.11.2022  04.12.2022  1
  0-18.RU   RU-CENTER-RU    13.06.2008  13.06.2023  14.07.2023  1
  0-1A.RU   BEGET-RU    05.03.2020  05.03.2023  05.04.2023  1
  0-2.RU    REGRU-RU    06.12.2016  06.12.2022  06.01.2023  1
  0-21.RU   REGRU-RU    18.04.2021  18.04.2023  19.05.2023  1
  0-22.RU   REGRU-RU    07.08.2021  07.08.2023  07.09.2023  1
  0-24.RU   RU-CENTER-RU    09.10.2000  11.10.2022  11.11.2022  1
  0-24H.RU  REGRU-RU    12.10.2021  12.10.2022  12.11.2022  1
  0-26-SBERBANK.RU  BEGET-RU    15.07.2021  15.07.2022  15.08.2022  1
  0-3.RU    REGRU-RU    28.10.2015  28.10.2022  28.11.2022  1
  0-33.RU   REGRU-RU    07.08.2021  07.08.2023  07.09.2023  1
  0-34.RU   R01-RU  18.08.2009  18.08.2022  18.09.2022  1
  0-36.RU   REGRU-RU    28.10.2019  28.10.2022  28.11.2022  1
  0-360.RU  REGRU-RU    10.08.2008  10.08.2023  10.09.2023  1
  0-38.RU   REGRU-RU    22.08.2021  22.08.2022  22.09.2022  1
  0-3F.RU   BEGET-RU    18.08.2020  18.08.2023  18.09.2023  1
  0-4.RU    REGRU-RU    12.01.2021  12.01.2023  12.02.2023  0
  0-44.RU   REGRU-RU    07.08.2021  07.08.2023  07.09.2023  1
  0-48.RU   REGRU-RU    17.10.2005  17.10.2022  17.11.2022  1
  0-5-30.RU RU-CENTER-RU    22.09.2021  22.09.2022  23.10.2022  1
  0-5.RU    RU-CENTER-RU    29.09.2006  29.09.2022  30.10.2022  1
  0-50.RU   BEELINE-RU  12.12.2007  12.12.2022  12.01.2023  1
  0-55.RU   REGRU-RU    27.09.2012  27.09.2022  28.10.2022  1
  0-57.RU   REGRU-RU    10.01.2022  10.01.2023  10.02.2023  1
  0-6.RU    REGRU-RU    31.10.2018  31.10.2022  01.12.2022  1
  0-60MPH.RU    RD-RU   24.01.2018  24.01.2023  24.02.2023  0
  0-63.RU   REGRU-RU    24.09.2020  24.09.2022  25.10.2022  1
  0-66.RU   REGRU-RU    07.08.2021  07.08.2023  07.09.2023  1
  0-7-7.RU  BEGET-RU    19.07.2014  19.07.2023  19.08.2023  1
  0-7-8.RU  BEGET-RU    19.07.2014  19.07.2023  19.08.2023  1
  0-7.RU    RU-CENTER-RU    12.01.2022  12.01.2023  12.02.2023  1
  0-71.RU   REGRU-RU    07.07.2021  07.07.2023  07.08.2023  1
  0-77.RU   REGRU-RU    07.08.2021  07.08.2023  07.09.2023  1
  0-78.RU   BEGET-RU    22.06.2009  22.06.2023  23.07.2023  1
  0-79.RU   ACTIVE-RU   22.09.2020  22.09.2022  23.10.2022  1
  0-7LET.RU REGRU-RU    12.08.2017  12.08.2022  12.09.2022  1
  0-8.RU    REGTIME-RU  11.12.2007  11.12.2022  11.01.2023  1
  0-88.RU   REGRU-RU    07.08.2021  07.08.2023  07.09.2023  1
  0-9-9.RU  REGRU-RU    10.08.2021  10.08.2022  10.09.2022  1
  0-9.RU    REGTIME-RU  04.05.2005  04.05.2023  04.06.2023  1
  0-93METALL.RU REGRU-RU    13.11.2021  13.11.2022  14.12.2022  1
  0-95.RU   REGRU-RU    03.02.2022  03.02.2023  06.03.2023  1
  0-999.RU  REGRU-RU    14.02.2022  14.02.2023  17.03.2023  0
  0-A.RU    RU-CENTER-RU    04.07.2018  04.07.2023  04.08.2023  1
  0-AA.RU   REGRU-RU    18.09.2010  18.09.2022  19.10.2022  1
  0-ALL-CINEMA-2018-HD.RU   REGRU-RU    13.11.2021  13.11.2022  14.12.2022  1
  0-B.RU    SALENAMES-RU    06.07.2010  06.07.2023  06.08.2023  1
  0-BASE.RU REGTIME-RU  03.02.2016  03.02.2023  06.03.2023  1
  0-BIRDS.RU    RU-CENTER-RU    16.10.2019  16.10.2022  16.11.2022  1
  0-BIT.RU  REGRU-RU    14.09.2021  14.09.2022  15.10.2022  1
  0-BMW.RU  REGRU-RU    02.04.2019  02.04.2023  03.05.2023  1
  0-C.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-CALORIY.RU  REGRU-RU    31.12.2020  31.12.2022  31.01.2023  1
  0-CC.RU   REGRU-RU    20.09.2010  20.09.2022  21.10.2022  1
  0-CENKA.RU    RU-CENTER-RU    12.11.2015  12.11.2022  13.12.2022  1
  0-CH.RU   REGRU-RU    03.11.2021  03.11.2022  04.12.2022  1
  0-CHAN.RU BEGET-RU    05.09.2011  05.09.2023  06.10.2023  1
  0-CODE.RU TIMEWEB-RU  28.08.2021  28.08.2022  28.09.2022  1
  0-COM.RU  REGRU-RU    19.01.2022  19.01.2023  19.02.2023  1
  0-D.RU    REGRU-RU    16.02.2017  16.02.2023  19.03.2023  1
  0-DA.RU   REGRU-RU    07.06.2022  07.06.2023  08.07.2023  1
  0-DAY.RU  BEGET-RU    04.04.2019  04.04.2023  05.05.2023  1
  0-DEV.RU  REGRU-RU    05.08.2021  05.08.2022  05.09.2022  1
  0-DEVELOPER.RU    REGRU-RU    08.09.2020  08.09.2022  09.10.2022  1
  0-DIVAN.RU    TIMEWEB-RU  14.12.2021  14.12.2022  14.01.2023  1
  0-DOLG.RU REGRU-RU    03.11.2021  03.11.2022  04.12.2022  1
  0-DOLGOV.RU   REGRU-RU    08.06.2022  08.06.2023  09.07.2023  1
  0-E.RU    SALENAMES-RU    06.07.2010  06.07.2023  06.08.2023  1
  0-EDE.RU  REGRU-RU    29.01.2022  29.01.2023  01.03.2023  1
  0-EE.RU   REGRU-RU    20.09.2010  20.09.2022  21.10.2022  1
  0-F.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-FOREX.RU    REGRU-RU    17.01.2008  17.01.2023  17.02.2023  1
  0-G-0.RU  BEGET-RU    14.12.2020  14.12.2022  14.01.2023  1
  0-G.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-GOODS.RU    R01-RU  19.09.2014  19.09.2022  20.10.2022  1
  0-GRAVITY.RU  REGRU-RU    09.06.2021  09.06.2022  10.07.2022  1
  0-H.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-HR.RU   REGRU-RU    14.07.2021  14.07.2022  14.08.2022  1
  0-I.RU    REGRU-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-INBOX.RU    REGTIME-RU  21.03.2012  21.03.2023  21.04.2023  1
  0-INFINITY.RU RU-CENTER-RU    31.01.2019  31.01.2023  03.03.2023  1
  0-IP.RU   REGRU-RU    07.04.2022  07.04.2023  08.05.2023  1
  0-IS-0.RU REGRU-RU    16.01.2021  16.01.2023  16.02.2023  1
  0-IT.RU   REGRU-RU    23.09.2015  23.09.2022  24.10.2022  1
  0-J.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-K.RU    ARDIS-RU    02.04.2008  02.04.2023  03.05.2023  1
  0-KALORII.RU  REGRU-RU    28.12.2021  28.12.2022  28.01.2023  1
  0-KILOMETR.RU REGRU-RU    02.10.2017  02.10.2022  02.11.2022  1
  0-KM.RU   REGRU-RU    01.02.2022  01.02.2023  04.03.2023  1
  0-L.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-M.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-MGTS.RU REGTIME-RU  12.02.2020  12.02.2023  15.03.2023  1
  0-N.RU    REGRU-RU    10.08.2016  10.08.2023  10.09.2023  1
  0-N0.RU   R01-RU  14.08.2021  14.08.2022  14.09.2022  1
  0-NDS.RU  REGRU-RU    19.12.2017  19.12.2022  19.01.2023  1
  0-O-0.RU  REGRU-RU    29.12.2017  29.12.2022  29.01.2023  1
  0-O.RU    R01-RU  11.07.2006  11.07.2023  11.08.2023  0
  0-P.RU    ARDIS-RU    11.03.2008  11.03.2023  11.04.2023  1
  0-PK.RU   R01-RU  05.10.2021  05.10.2022  05.11.2022  1
  0-PLITKA.RU   REGRU-RU    31.01.2022  31.01.2023  03.03.2023  1
  0-PLUS-REST.RU    TIMEWEB-RU  14.12.2021  14.12.2022  14.01.2023  1
  0-PLUS.RU R01-RU  27.02.2017  27.02.2023  30.03.2023  1
  0-POINT.RU    REGRU-RU    03.11.2021  03.11.2022  04.12.2022  1
  0-POSREDNIKOV.RU  R01-RU  26.08.2011  26.08.2022  26.09.2022  1
  0-PRO.RU  REGRU-RU    25.01.2021  25.01.2023  25.02.2023  1
  0-PROCENT.RU  REGRU-RU    18.06.2021  18.06.2022  19.07.2022  1
  0-PROCENTOV.RU    REGRU-RU    24.08.2018  24.08.2022  24.09.2022  1
  0-PROTECTED.RU    REGRU-RU    15.08.2021  15.08.2022  15.09.2022  1
  0-Q.RU    REGRU-RU    26.09.2018  26.09.2022  27.10.2022  1
  0-R.RU    SALENAMES-RU    07.06.2011  07.06.2023  08.07.2023  1
  0-RANGE.RU    DOMENUS-RU  22.04.2016  22.04.2023  23.05.2023  1
  0-RU.RU   REGRU-RU    25.05.2021  25.05.2023  25.06.2023  0
  0-S.RU    SALENAMES-RU    07.06.2011  07.06.2023  08.07.2023  1
  0-SC.RU   REGRU-RU    26.09.2010  26.09.2022  27.10.2022  1
  0-SENSE.RU    REGRU-RU    29.01.2022  29.01.2023  01.03.2023  1
  0-SOFT.RU REGRU-RU    11.07.2021  11.07.2023  11.08.2023  1
  0-SOFTS.RU    REGRU-RU    11.07.2021  11.07.2023  11.08.2023  1
  0-SP.RU   REGRU-RU    26.09.2010  26.09.2022  27.10.2022  1
  0-SPORTE.RU   REGRU-RU    03.11.2021  03.11.2022  04.12.2022  1
  0-SS.RU   REGRU-RU    18.09.2010  18.09.2022  19.10.2022  1
  0-SUGAR.RU    RU-CENTER-RU    23.03.2021  23.03.2023  23.04.2023  1
  0-SV.RU   REGRU-RU    26.09.2010  26.09.2022  27.10.2022  1
  0-T.RU    REGRU-RU    22.01.2022  22.01.2023  22.02.2023  1
  0-TAXI.RU REGRU-RU    03.11.2021  03.11.2022  04.12.2022  1
  0-TEL.RU  REGRU-RU    04.10.2017  04.10.2022  04.11.2022  1
  0-U.RU    SALENAMES-RU    07.06.2011  07.06.2023  08.07.2023  1
  0-UA.RU   REGRU-RU    26.09.2010  26.09.2022  27.10.2022  1
  0-V.RU    SALENAMES-RU    31.05.2009  31.05.2023  01.07.2023  1
  0-VUHLOP.RU   BEGET-RU    23.07.2021  23.07.2022  23.08.2022  1
  0-W.RU    SALENAMES-RU    07.06.2011  07.06.2023  08.07.2023  1
  0-WEB.RU  REGTIME-RU  01.02.2010  01.02.2023  04.03.2023  1
  0-WM.RU   RU-CENTER-RU    14.02.2014  14.02.2023  17.03.2023  1
  0-X.RU    SALENAMES-RU    07.06.2011  07.06.2023  08.07.2023  1
  0-Y.RU    R01-RU  13.07.2009  13.07.2022  13.08.2022  1
  0-Z.RU    R01-RU  19.07.2006  19.07.2023  19.08.2023  0
  0-ZAEM.RU REGRU-RU    15.04.2021  15.04.2023  16.05.2023  1
  0-ZAIMO.RU    REGRU-RU    15.04.2021  15.04.2023  16.05.2023  1
  0-ZERO.RU REGRU-RU    21.04.2021  21.04.2023  22.05.2023  1
  00-0.RU   REGRU-RU    30.06.2022  30.06.2023  31.07.2023  1
  00-00.RU  R01-RU  17.10.2004  17.10.2022  17.11.2022  0
  00-000-000.RU NETHOUSE-RU 14.01.2021  14.01.2023  14.02.2023  1
  00-000.RU REGRU-RU    01.12.2011  01.12.2022  01.01.2023  1
  00-01.RU  REGTIME-RU  06.10.2011  06.10.2022  06.11.2022  1
  00-1.RU   ARDIS-RU    26.03.2008  26.03.2023  26.04.2023  1
  00-12.RU  R01-RU  04.07.2013  04.07.2023  04.08.2023  1
  00-13.RU  REGRU-RU    22.01.2022  22.01.2023  22.02.2023  1
  00-23.RU  NETFOX-RU   30.05.2015  30.05.2023  30.06.2023  1
  00-24.RU  REGRU-RU    13.02.2020  13.02.2023  16.03.2023  1
  00-30.RU  REGRU-RU    05.02.2009  05.02.2023  08.03.2023  1
  00-7.RU   REGRU-RU    22.07.2021  22.07.2023  22.08.2023  1
  00-77.RU  TIMEWEB-RU  08.08.2021  08.08.2022  08.09.2022  1
  00-8.RU   R01-RU  04.07.2013  04.07.2023  04.08.2023  1`;

  await crawlerTasksQueue.add(() => handleInputData(text));
  process.exit(0);
})();

querySet в моём коде просто задержкой эмулирует запись в БД.

Чтобы использовать этот код в вашем роутере достаточно написать

app.post("/api/files/send", (req, res) => {
    crawlerTasksQueue.add(() => handleInputData(req.body.text)).catch(console.error);
    return res.json({ ok: true });
});

Очередь crawlerTasksQueue нужна для того, чтобы файлы, которые загружаются извне, обрабатывались друг за другом, а не одновременно.


package.json

{
  "name": "your-project-name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "fake-useragent": "^1.0.1",
    "p-queue": "^7.2.0"
  }
}

→ Ссылка