Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Коды завершения

Код завершения — число, которое программа возвращает системе, когда заканчивает работу. 0 означает успех, любое другое число — ошибку. Сам человек этот код обычно не видит, но его читают скрипты сборки, автоматические проверки и другие программы, чтобы решить, продолжать ли работу.

Успешное завершение

Если программа дошла до конца без ошибок, Node.js сам вернёт 0:

console.log('Статьи проверены');

Проверить код последней команды можно в терминале: в bash — echo $?, в PowerShell — $LASTEXITCODE.

node app.js
echo $?

Выведется «Статьи проверены», а затем 0.

Сообщить об ошибке

Создайте файл check.js, который проверяет, передано ли имя файла со статьями. Если нет — программа ставит код 1:

// check.js
const file = process.argv[2];
 
if (!file) {
  console.error('Укажите файл со статьями');
  process.exitCode = 1;
} else {
  console.log(`Проверяем ${file}`);
}

node check.js выведет сообщение и вернёт 1, а node check.js posts.json — «Проверяем posts.json» и 0. Ошибки пишут через console.error(): он выводит в отдельный поток ошибок, который можно перенаправить отдельно от обычного вывода.

exitCode и exit()

Есть два способа задать код:

СпособЧто происходит
process.exitCode = 1Код запоминается, программа завершает начатое
process.exit(1)Программа останавливается немедленно

Предпочитайте process.exitCode. Функция process.exit() обрывает всё сразу: недописанный файл или неотправленный ответ так и останутся незавершёнными.

Необработанная ошибка

Если в программе случилась ошибка и её никто не перехватил, Node.js напечатает её и сам вернёт код 1:

// broken.js
const posts = undefined;
 
console.log(posts.length);

В терминале появится TypeError: Cannot read properties of undefined с номером строки, а echo $? покажет 1.

Где это пригодится

В package.json скрипты можно объединять через &&: вторая команда запустится, только если первая вернула 0.

{
  "scripts": {
    "deploy": "node check.js posts.json && node build.js"
  }
}

Частая ошибка

Программа вывела «Ошибка!», но вернула 0 — и автоматическая проверка решила, что всё в порядке:

// check.js
if (!process.argv[2]) {
  console.log('Ошибка: нет файла');
}

Сообщения недостаточно. Когда программа не справилась с задачей, всегда ставьте process.exitCode = 1.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.