Menu
CoddyTech

Ошибки и коды завершения

Часть раздела Основы Node.js путешествия по Node.js на Coddy. Урок 5 из 33.

Если команда завершается с ошибкой, человек у терминала должен видеть причину, а любая программа, запустившая вашу, должна знать, что она завершилась с ошибкой.

У программы есть два потока вывода: stdout для результатов и stderr для ошибок, которые выводятся с помощью console.error. При завершении программа возвращает код выхода: 0 означает, что она выполнилась успешно, любое другое значение означает ошибку. process.exit(1) немедленно останавливает программу с кодом 1.

// node divide.js 6 0
const [a, b] = process.argv.slice(2).map(Number);
if (b === 0) {
    console.error('Cannot divide by zero');
    process.exit(1);
}
console.log(a / b);

Терминал рядом с вашим кодом отображает stderr красным цветом и выводит код выхода, если он не равен 0.

challenge icon

Задание

Легко

Если кто-то неправильно пользуется твоим инструментом, он должен объяснить, как им пользоваться, и сообщить терминалу о сбое. Программы делают это с помощью потока ошибок stderr и кода завершения.

  1. В notes.js измени последнюю ветку else — ту, которая выводит Unknown command:. Ошибки направляются в stderr, поэтому выводи их с помощью console.error, а не console.log.
  2. Если команда была введена, но она неизвестна, выведи в stderr эти две строки в указанном порядке:
    Unknown command: remove
    Usage: node notes.js <command> [words]
    В первой строке указано введённое слово: здесь это remove из node notes.js remove 3. Вторая строка всегда одинакова. Скопируй её точно, включая <command> и [words]: это часть текста, а не значения, которые нужно подставить.
  3. Если после node notes.js ничего не введено, выведи в stderr только строку с инструкцией по использованию. Не выводи Unknown command: undefined.
  4. В обоих случаях заверши программу с кодом завершения 1 — это означает «произошёл сбой».
  5. add и list работают как и прежде. Команда node notes.js add Buy milk по-прежнему выводит Adding: Buy milk и завершается с кодом 0.

Попробуй: нажми «Запустить», оставив поле после $ node notes.js пустым. Ты увидишь строку с инструкцией по использованию красным цветом, а в терминале появится код завершения 1. Затем введи remove 3 и нажми Enter: ты увидишь Unknown command: remove и строку с инструкцией по использованию — обе красным цветом, а также код завершения 1. Затем введи add Buy milk: ты увидишь Adding: Buy milk обычным цветом, и код завершения не появится, потому что терминал скрывает 0.

Попробуйте сами

// Здесь начинается ваш инструмент для заметок.
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

if (command === 'add') {
    console.log(`Adding: ${text}`);
} else if (command === 'list') {
    console.log('No notes yet');
} else {
    console.log(`Unknown command: ${command}`);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы Node.js

Потренируйтесь самостоятельно: Песочница Express