Логирование навигации

Navigo предоставляет встроенные возможности для отслеживания переходов между маршрутами и отладки навигации. Логирование позволяет фиксировать события маршрутизатора, включая изменение пути, обработку параметров и вызовы соответствующих обработчиков. Основная цель — облегчить выявление ошибок и понимание последовательности вызовов маршрутов.

Для включения базового логирования в Navigo используется метод hooks и событие before, after или error.

const router = new Navigo('/');

router.hooks({
  before: (done, params) => {
    console.log('Перед переходом на маршрут:', params);
    done();
  },
  after: (params) => {
    console.log('Маршрут успешно обработан:', params);
  },
  error: (error) => {
    console.error('Ошибка при навигации:', error);
  }
});
  • before — вызывается перед обработкой маршрута. Позволяет выполнить проверку, логирование или асинхронную подготовку данных.
  • after — срабатывает после успешного выполнения маршрута, полезно для аналитики или логирования переходов.
  • error — фиксирует ошибки навигации, включая случаи, когда маршрут не найден или возникла исключительная ситуация в обработчике.

Логирование параметров маршрута

Navigo поддерживает динамические сегменты пути, которые можно логировать для анализа.

router.on('/users/:id', (params) => {
  console.log('ID пользователя:', params.id);
});
  • :id — динамический сегмент, значение которого автоматически извлекается Navigo и передается в объект params.
  • Объект params можно использовать в любых хуках для логирования и проверки правильности навигации.

Для групповых маршрутов можно использовать шаблоны с несколькими параметрами:

router.on('/posts/:postId/comments/:commentId', (params) => {
  console.log(`Пост: ${params.postId}, Комментарий: ${params.commentId}`);
});

Логирование ошибок и отсутствующих маршрутов

Чтобы отслеживать попытки перехода на несуществующие маршруты, можно настроить обработчик notFound:

router.notFound((query) => {
  console.warn('Маршрут не найден:', query);
});
  • query содержит путь, на который пользователь пытался перейти.
  • Используется для ведения статистики и отладки некорректных переходов.

Расширенное логирование с уровнями

Для более детальной отладки можно реализовать собственную систему логирования с уровнями:

const log = {
  info: (msg, data) => console.log('INFO:', msg, data),
  warn: (msg, data) => console.warn('WARN:', msg, data),
  error: (msg, data) => console.error('ERROR:', msg, data)
};

router.hooks({
  before: (done, params) => {
    log.info('Начало маршрута', params);
    done();
  },
  after: (params) => {
    log.info('Маршрут завершен', params);
  },
  error: (err) => {
    log.error('Ошибка маршрутизации', err);
  }
});

Такой подход позволяет различать информационные сообщения, предупреждения и ошибки, упрощая последующий анализ логов.

Логирование программных переходов

Navigo позволяет программно инициировать навигацию с помощью метода navigate. Для логирования этих переходов можно обернуть вызовы:

function navigateAndLog(path) {
  console.log('Переход к маршруту:', path);
  router.navigate(path);
}

navigateAndLog('/users/42');

Это особенно полезно при реализации SPA, где переходы между страницами происходят без перезагрузки и их необходимо отслеживать.

Совмещение с внешними системами логирования

Для ведения централизованного журнала можно интегрировать Navigo с внешними сервисами, такими как Sentry или LogRocket:

router.hooks({
  after: (params) => {
    externalLogger.track('Navigation', params);
  },
  error: (err) => {
    externalLogger.error('Navigation Error', err);
  }
});
  • externalLogger — любой объект, реализующий методы логирования.
  • Позволяет фиксировать маршруты и ошибки не только в консоли, но и на сервере или в аналитической платформе.

Резюме по методам логирования

  • Hooks: before, after, error — основной механизм перехвата событий навигации.
  • Params: динамические параметры маршрута для подробного анализа переходов.
  • notFound: фиксация попыток перехода на неизвестные маршруты.
  • Программные переходы: логирование вызовов navigate для SPA.
  • Внешние системы: интеграция с аналитикой и централизованными журналами для расширенного контроля.

Эти методы обеспечивают полное покрытие логирования навигации в приложениях на базе Navigo, позволяя получать детальные данные о работе маршрутизатора и корректно обрабатывать ошибки.