Отладка
Отладка — поиск причины, по которой программа ведёт себя не так, как задумано. Самый простой способ — вывести значения через console. Когда этого мало, программу запускают под отладчиком: он останавливает её на нужной строке и показывает все переменные. Общие приёмы отладки вы видели в учебнике; здесь — как это делается в Node.js.
Больше, чем console.log
// app.js
const posts = [
{ id: 1, title: 'Привет, Node.js', views: 120 },
{ id: 2, title: 'Работа с файлами', views: 85 },
];
console.table(posts);
console.error('Это сообщение уйдёт в поток ошибок');
console.time('сортировка');
posts.sort((a, b) => b.views - a.views);
console.timeEnd('сортировка');console.table() нарисует в терминале таблицу со столбцами id, title и views. console.time() и console.timeEnd() с одинаковой меткой измерят время между ними, например «сортировка: 0.05ms».
Вложенные объекты
console.log() в Node.js показывает вложенность только до третьего уровня, глубже — [Object]. Чтобы увидеть всё, используйте console.dir() с параметром depth:
// app.js
const post = { id: 1, author: { name: 'Анна', profile: { city: { name: 'Berlin' } } } };
console.dir(post, { depth: null });depth: null снимает ограничение, и в терминале будет видно name: 'Berlin'.
Запуск под отладчиком
Флаг --inspect включает отладчик. Добавьте в код строку debugger там, где хотите остановиться:
// src/posts.js
export async function addPost(title, body) {
const posts = await loadPosts();
debugger;
// ...
}Запустите сервер с флагом --inspect:
node --inspect src/server.jsОткройте в Chrome адрес chrome://inspect и нажмите inspect под своим скриптом. Отправьте POST-запрос на /posts — программа остановится на строке debugger, а в панели будут видны title, body и posts. Флаг --inspect-brk останавливает программу ещё на первой строке.
Отладка в VS Code
В VS Code проще всего открыть терминал командой «JavaScript Debug Terminal» из палитры команд (Ctrl+Shift+P). Любая программа, запущенная в нём через node или npm run, сразу подключается к отладчику. Точку остановки ставят щелчком слева от номера строки — писать debugger в коде не нужно.
| Клавиша в VS Code | Действие |
|---|---|
| F5 | Продолжить до следующей точки |
| F10 | Следующая строка |
| F11 | Войти внутрь функции |
| Shift+F5 | Остановить отладку |
Частая ошибка
Строку debugger и временные console.log() легко забыть в коде. На сервере без отладчика debugger ничего не делает, но лишние сообщения засоряют журнал и могут вывести пароли или личные данные. Перед коммитом найдите их поиском по проекту и удалите.