Медленная запись в базу данных
делаю считывание строк из файла, и опрос на статус код, тобишь на доступность сайта и статус коды, 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 шт):
Вот вам наколеночный вариант краулера на чистых node:http (и node:https).
С вашей выборкой в 200 хостов он справляется за 11 секунд, если проверять только http, и за 12 секунд, если проверять http и https.
Вся фишка в:
Использование
node:http. Я не загружаю текст страницы, для принятия решения достаточно заголовков ответа сервера.Использование yandex в качестве dns resolver. Яндекс близко, экономим время на ожидании ответа. Но если вы находитесь не в России то стоит подобрать самый близкий dns resolver или прописать dns google/cloudflare.
Использование таймаутов. Не заморачиваемся ожиданием ответа дольше нескольких секунд. Но если скорость вашего соединения маловата то таймеры следует увеличить.
Обращения к хостам запараллелены в локальной очереди
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"
}
}