Меню

Debugging в NodeJS

04.07.2018 - Back-end, NodeJS

Debugging

Итак, когда у нас выставлена среда разработки, то мы включаем morgan для логгирования, а также выводим console.log. console.log давний друг разработчиков. Он все время используется для дебагинга. Но этот подход очень не очень). Постоянно нужно где то подставлять, потом комментить, потом раскоментить и т.д. Лучший подход логгировать сообщения с целью дебаггинга — использовать debug пакет. С помощью debug мы собираемся заменить все эти console.log записи вызовом debug функции. И затем мы можем использовать переменную среды, чтобы включить / выключить дебаггинг. Теперь нам не нужно будет по 100 раз лезить в код, раскоменчивать и прописывать консоль логи. Мы сможем контролировать состояние дебаггинга извне используя переменные среды. Но более того, мы сможем определить уровень информации дебаггинга которую мы хотим видеть. Может быть иногда вы работает с проблемой базы данных, тогда мы хотим увидеть информацию непосредственно связанную с базой данных. И нам не нужно лезть в код и изменять огромную кучу консоль логов.

Давайте посмотрим, как нам использовать debug пакет.

Для начала давайте его установим.

npm i debug

Давайте перейдем в index.js и импортируем debug модуль. Он возвращает функцию. Итак, мы вызовем эту функцию и передадим ей аргумент. И этот аргумент, это namespace, который мы определим для дебаггинга. Например, мы можем определить namespace — app:startup.

const startupDebugger = require('debug')('app:startup');

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

const dbDebugger = require('debug')('app:db');

Теперь вызовем нашу startupDebugger функцию.

if (app.get('env') === 'development') {
    app.use(morgan('tiny'));
    startupDebugger('Morgan enabled...')
}

И представим, что у нас там есть немного працы связанной с DB. И нам нужно получить оттуда какую то дебаг инфу. Здесь мы воспользуемся другой debugger функцией — dbDebugger.

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

export DEBUG=app:startup

Это означает, что мы хотим видеть только сообщения связанные с этим нэймспейсом.

Теперь, если мы запустим сервер, то увидим следующие сообщения

  app:startup Morgan enabled... +0ms
Application Name: My Express App - Development
Mail Server: dev-mail-server
Mail Password: 1234
We listen 3000

Если мы допустим, не хотим видеть никакой DEBUG инфы

export DEBUG=

И теперь мы не увидим никакой debug инфы.
Или если мы хотим увидеть debug инфу из разных источников, то можем указать их через запятую.

export DEBUG=app:startup,app:db

Или если вы хотите увидеть все дебаг сообщения, мы можем использовать wildcard

export DEBUG=app:*
  app:startup Morgan enabled... +0ms
  app:db Connected to the database... +0ms
Application Name: My Express App - Development
Mail Server: dev-mail-server
Mail Password: 1234
We listen 3000

В этом вся прелесть этого debug пакета, что мы можем легко, переключаться между нужными namespacами. Можно забыть про console.log.

Есть более быстрый способ установки типа дебага который мы хотим видеть. В этом случае нам не нужно явно устанавливать переменную среды, используя команду export. Мы можем установить переменную среды во временную переменную приложения.

Допустим, сейчас хотим посмотреть только дебаг сообщения в app:db простанстве.

DEBUG=app:db nodemon index.js

Как правило, в реальном приложении не используется несколько дебаг функций в одной модуле. Как правило вызывается одна функция и называется она debug

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *