Коды завершения
Код завершения — число, которое программа возвращает системе, когда заканчивает работу. 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.