получаю ошибку:
MongoDB connected successfully

<--- Last few GCs --->

[19520:000001DA97C3DB20]    32594 ms: Scavenge 2045.5 (2083.5) -> 2045.0 (2083.5) MB, 2.7 / 0.0 ms  (average mu = 0.350, current mu = 0.357) allocation failure;
[19520:000001DA97C3DB20]    32598 ms: Scavenge 2045.8 (2083.5) -> 2045.3 (2083.5) MB, 2.7 / 0.0 ms  (average mu = 0.350, current mu = 0.357) allocation failure;
[19520:000001DA97C3DB20]    32602 ms: Scavenge 2046.0 (2083.5) -> 2045.5 (2085.7) MB, 3.3 / 0.0 ms  (average mu = 0.350, current mu = 0.357) allocation failure;

предыдущая версия работала, при переходе на главную ошибок не возникало. предыдущая версия:

я пытаюсь перейти по телефону из большой базы phoneNumbers: 
_id
6492d415a91404ad3dbbf693
number
"9649396437"
url
"/phone/<PRESIDIO_ANONYMIZED_PHONE_NUMBER>"

comments
Array
callType
""

по url http://localhost:3000/phone/<PRESIDIO_ANONYMIZED_PHONE_NUMBER>

пишет, что Номер телефона не найден, хотя он есть в базе данных. Из чего делаю вывод, что скрипт не считывает данные из базы данных phoneNumbers

вместо этого скрипт использует новую коллекцию, где добавляются новые номера под названием (с маленькой буквы): phonenumbers, а должен phoneNumbers

вот полный скрипт:

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 });

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

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

// Функция для получения 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("Запущен процесс поиска новых номеров...");

  const phoneNumbers = await PhoneNumber.find().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);
      existingPhoneNumber.save();
    }
  });

  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);
      }
    }
  }
  return newPhoneNumbers;
}
// Создать маршрут для страницы синформацией о номере телефона
// Создать маршрут для страницы с информацией о номере телефона
// Создать маршрут для страницы с информацией о номере телефона
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("Номер телефона не найден");
  }
});

// Маршрут для главной страницы
app.get("/", async (req, res) => {
  const phoneNumbers = await PhoneNumber.find().sort({ _id: -1 }).exec();
  const data = {
    phoneNumbers: phoneNumbers,
  };
  const html = ejs.render(fs.readFileSync("views/index.ejs", "utf8"), data);
  
  res.send(html);
});

// Запуск сервера и поиск новых номеров телефонов каждые 10 минут
const searchInterval = 1 * 60 * 1000; // 1 минут в миллисекундах
app.listen(3000, () => {
  console.log("Сервер запущен на порту 3000");
  getNewPhoneNumbers();
  setInterval(getNewPhoneNumbers, searchInterval);
});

текущая версия:

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 });
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function() {
  console.log("MongoDB connected successfully");
});

// Определение модели PhoneNumber
const PhoneNumberSchema = new mongoose.Schema({
  number: { type: String, index: true },
  url: String,
  comments: [String],
  callType: String
}, { collection: 'phoneNumbers' });
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("Запущен процесс поиска новых номеров...");

  const phoneNumbers = await PhoneNumber.find().sort({ _id: -1 }).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);
      existingPhoneNumber.save();
    }
  });

  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);
      }
    }
  }
  return newPhoneNumbers;
}

// Создать маршрут для страницы с информацией о номере телефона
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("Номер телефона не найден");
  }
});

// Маршрут для генерации списка всех номеров телефонов
app.get("/", async (req, res) => {
  const phoneNumbers = await PhoneNumber.find().sort({ _id: -1 }).exec();
  const data = { phoneNumbers: phoneNumbers };
  res.render('index', data);
});

// Запустить процесс поиска новых номеров телефонов и сохранения их в базе данных каждые 5 минут
setInterval(getNewPhoneNumbers, 5 * 60 * 1000);

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