в index.ejs, когда у номера несколько комментариев, показывает один комментарий, а в phone.ejs показывает совершенно другой, когда переходишь на phone хотя должен показывать все два комментария, а не один из.

например, в index показывает коммент:

"Вообще некопетентные молодые девчушки сидят и внушают посмотреть на проблему с "иной стороны", а потом бросила трубку. Ну и зачем такое качество психол. помощи ?? Я разочарован. Неадекваты"

открываю страницу с номером (phone) и там появляется другой комментарий: "Телефонная служба МЧС которая не помогает психологически и вообще никак не реагируют на звонившего ,идёт монолог", тот что был в index не учитывается.

по идее он должен выводить два коммента.

app.js:

const express = require("express");
const ejs = require("ejs");
const mongoose = require("mongoose");
const request = require("request");
const cheerio = require("cheerio");
const fs = require("fs");

const app = express();

// Установка EJS в качестве шаблонизатора
app.set('view engine', 'ejs');

// Подключение к MongoDB
mongoose.connect('mongodb://127.0.0.1/phoneNumbers', { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => {
    console.log("Соединение с MongoDB установлено");
  })
  .catch((err) => {
    console.error("Ошибка подключения к MongoDB:", err);
  });

// Определение схемы и модели для хранения номеров телефонов
const PhoneNumberSchema = new mongoose.Schema({
  number: { type: String, index: true },
  url: String,
  comments: [String],
  callType: String
});

const PhoneNumber = mongoose.model('PhoneNumber', PhoneNumberSchema, 'phoneNumbers');

// Функция для получения HTML-кода страницы
function getHtml(url) {
  return new Promise((resolve, reject) => {
    request(url, (error, response, html) => {
      if (error) {
        reject(error);
      } else {
        resolve(html);
      }
    });
  });
}

// Функция для получения номеров телефонов и сохранения их в базе данных
async function getNewPhoneNumbers() {
  console.log("Запущен процесс поиска новых номеров...");

  try {
    const phoneNumbers = await PhoneNumber.find().sort({ _id: -1 }).limit(100).exec();
    const lastPageUrl = phoneNumbers.length > 0 ? phoneNumbers[0].url : null;
    const newPhoneNumbers = [];

    // Получить HTML-код первой страницы с номерами телефонов
    const firstPageUrl = "https://zvonili.com/";
    const firstPageHtml = await getHtml(firstPageUrl);

    // Использовать Cheerio для парсинга HTML-кода и извлечения информации о номере телефона
    const $firstPage = cheerio.load(firstPageHtml);
    const phoneElements = $firstPage(".card-header");

    phoneElements.each((index, element) => {
      const phoneNumber = $firstPage(element).find(".nomerlnk").text().trim();
      const url = $firstPage(element).find(".nomerlnk").attr("href");
      const comments = $firstPage(element).next().find("blockquote").text().trim().replace(/\s*[\[\(]?\s*(Опросы|Реклама|Мошенники)\s*[\]\)]?\s*/gi, '');
      const callTypeElements = $firstPage(element).next().find("span.type");
      const callType = callTypeElements.length > 0 ? callTypeElements.map((index, element) => $firstPage(element).text().trim()).get().join(", ") : "";

      // Добавить новый номер телефона в массив, если его еще нет в базе данных
      const existingPhoneNumber = phoneNumbers.find((phone) => phone.number === phoneNumber);
      if (!existingPhoneNumber) {
        newPhoneNumbers.push({ number: phoneNumber, url: url, comments: comments, callType: callType });
      } else if (!existingPhoneNumber.comments.includes(comments)) {
        existingPhoneNumber.comments.push(comments);
        PhoneNumber.updateOne({ _id: existingPhoneNumber._id }, { comments: existingPhoneNumber.comments })
          .then(() => {
            console.log(`Комментарий "${comments}" добавлен к номеру ${phoneNumber}`);
          })
          .catch((err) => {
            console.error(`Ошибка обновления комментария для номера ${phoneNumber}:`, err);
          });
      }
    });

    console.log(`Найдено ${newPhoneNumbers.length} новых номеров телефонов.`);

    // Сохранить новые номера телефонов в базе данных
    if (newPhoneNumbers.length > 0) {
      for (const phoneNumber of newPhoneNumbers) {
        const existingPhoneNumber = phoneNumbers.find((phone) => phone.number === phoneNumber.number);
        if (!existingPhoneNumber) {
          await PhoneNumber.create(phoneNumber);
        }
      }
    }
  } catch (err) {
    console.error("Ошибка при поиске новых номеровтелефонов:", err);
  }
}

// Отображение списка номеров телефонов на главной странице
app.get('/', async (req, res) => {
  try {
    const phoneNumbers = await PhoneNumber.find().sort({ _id: -1 }).limit(100).exec();
    res.render('index', { phoneNumbers });
  } catch (err) {
    console.error("Ошибка при получении списка номеров телефонов:", err);
    res.status(500).send("Ошибка на сервере");
  }
});

app.get("/phone/:number", async (req, res) => {
const phoneNumber = await PhoneNumber.findOne({ number: req.params.number });

if (phoneNumber) {
const data = {
number: phoneNumber.number,
comments: phoneNumber.comments,
callType: phoneNumber.callType,
};
res.render('phone', data);
} else {
res.status(404).send("Номер телефона не найден");
}
});

// Запуск процесса поиска новых номеров телефонов каждые 10 минут
setInterval(getNewPhoneNumbers, 1 * 10 * 1000);

// Запуск сервера
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Сервер запущен на порту ${PORT}`);
});

index:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Список номеров телефонов</title>
    <!-- Подключение Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css">
    <!-- Подключение Font Awesome CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <!-- Подключение кастомных стилей CSS -->
    
  </head>
  <body>
    <div class="container">
      <h1 class="my-5">Список номеров телефонов</h1>
      <ul class="list-group">
        <% for (let i = 0; i < 12 && i < phoneNumbers.length; i++) { %>
          <li class="list-group-item">
            <div class="d-flex justify-content-between align-items-center">
              <h2 class="mb-0"><a href="/phone/<%= phoneNumbers[i].number %>"><%= phoneNumbers[i].number %></a></h2>
              <% if (phoneNumbers[i].callType) { %>
                <small class="text-muted"><%= phoneNumbers[i].callType %></small>
              <% } %>
            </div>
            <% if (phoneNumbers[i].comments.length > 0) { %>
              <p class="my-2"><%= phoneNumbers[i].comments.join(", ") %></p>
            <% } %>
          </li>
        <% } %>
      </ul>
    </div>

    <!-- Подключение Bootstrap JS -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.bundle.min.js"></script>
  </body>
</html>

phone:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Номер телефона <%= number %></title>
    <!-- Подключение Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css">
    <!-- Подключение Font Awesome CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <!-- Подключение кастомных стилей CSS -->
    <link rel="stylesheet" href="/styles.css">
  </head>
  <body>
    <div class="container">
      <h1 class="my-5">Номер телефона <%= number %></h1>
      <% if (comments.length > 0) { %>
        <div class="card mb-3">
          <div class="card-header">Комментарии</div>
          <ul class="list-group list-group-flush">
            <% for (let i = 0; i < 3 && i < comments.length; i++) { %>
             <li class="list-group-item"><%= comments[i] %></li>
            <% } %>
          </ul>
        </div>
      <% } else { %>
        <p>Нет комментариев для этого номера телефона.</p>
      <% } %>
      <% if (callType) { %>
        <p class="my-2">Тип звонка: <%= callType %></p>
      <% } %>
      <a href="/" class="btn btn-primary">Назад к списку номеров телефонов</a>
    </div>

    <!-- Подключение Bootstrap JS -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.bundle.min.js"></script>
  </body>
</html>