pos_ilya
@pos_ilya
Cringe person

Почему метод модели Sequelize `findOrCreate()` создаёт только 1 запись?

// index.js

import needle from "needle";
import Cheerio from "cheerio";
import { Site, Link } from "./db.js";

async function get_new_links(site) {
    // Тут мы получаем все ссылки
    async function get_links(url) {
        let links = [];

        let response = await needle("get", url);

        let $ = Cheerio.load(response.body);
        
        let a = $("a");

        a.each((i, element) => {
            links.push(new URL($(element).attr("href"), url).href);
        });
        
        return links;
    }

    let links = await get_links(site.link);

    // Тут мы создаём записи с ссылками, которые получили, если они не были созданы
    links.forEach(async link => {
        try {
            await Link.findOrCreate({
                where: {
                    link: link,
                    SiteId: site.id
                }
            });
        } catch {

        }
    });
}

(async () => {
    const sites = await Site.findAll();

    sites.forEach(async site => {
        await get_new_links(site);
    });
})();


Скрипт почему-то создаёт только 1 запись с ссылкой, хотя ссылок получает гораздо больше. Ссылки, которые он получает:
[
  'http://www.ettu.ru/',
  'http://www.ettu.ru/about/',
  'http://www.ettu.ru/news/',
  'http://www.ettu.ru/pass/',
  'http://www.ettu.ru/contacts/',
  'http://maps.yandex.ru/?ll=60.597223%2C56.837992&spn=0.322723%2C0.162022&z=12&l=map%2Ctrf%2Ctrfe&trfm=cur',
  'http://www.ettu.ru/accessory/?accessory=on',
  'http://www.ettu.ru/news/',
  'http://www.ettu.ru/news/?rss',
  'http://www.ettu.ru/',
  'http://www.ettu.ru/news/',
  'http://www.ettu.ru/news/group/routeschange/9',
  'http://www.ettu.ru/news/group/newsttu/10',
  'http://www.ettu.ru/news/group/get_news/11',
  'http://www.ettu.ru/transport_onlayn/',
  'http://www.ettu.ru/gde_tramvay/',
  'http://www.ettu.ru/gde_trolleybus/',
  'http://www.ettu.ru/news/2023/01/16/758/',
  'http://www.ettu.ru/news/2023/01/16/758/',
  'http://www.ettu.ru/sitemap/',
  'https://yandex.ru/maps/-/CCUBN8VbLA',
  'http://www.ettu.ru/news/#',
  'http://www.ample.ru/'
]
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы