错误和退出代码
本课属于 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 时将其打印出来。
挑战
简单如果有人错误地使用你的工具,它应该说明如何使用,并告知终端操作失败了。程序通过错误流 stderr 和退出代码来实现这一点。
- 在
notes.js中,修改最后一个else分支,也就是输出Unknown command:的分支。错误信息要发送到 stderr,因此要用console.error而不是console.log来输出。 - 如果输入了命令但命令未知,就按以下顺序向 stderr 输出这两行:第一行写出输入的单词:这里是
Unknown command: remove Usage: node notes.js <command> [words]remove,来自node notes.js remove 3。第二行始终相同。请原样复制,保留<command>和[words]:它们是文本的一部分,不需要填写内容。 - 如果
node notes.js后面没有输入任何内容,就只向 stderr 输出用法说明行。不要输出Unknown command: undefined。 - 这两种情况下,都要以退出代码 1 结束程序,这表示“运行失败”。
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}`);
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
Node.js 基础中的所有课
自己练习: Express 在线编辑器