Menu
CoddyTech

错误和退出代码

本课属于 Coddy Node.js 学习旅程的“Node.js 基础”单元。第 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 在线编辑器