环境变量
本课属于 Coddy Node.js 学习旅程的“Node.js 基础”单元。第 6 课,共 33 课。
有些设置属于运行程序的人,而不是他们在程序运行后输入的文字。
环境变量是 shell 传递给每个程序的命名字符串。Node 会把它们放在 process.env 中。未设置的变量是 undefined。a ?? b 会给出 a,除非 a 是 undefined 或 null;这时它会给出 b。因此,如果没有设置 CITY,process.env.CITY ?? 'Lisbon' 就是 'Lisbon'。
// CITY=Oslo node weather.js
const city = process.env.CITY ?? 'Lisbon';
console.log(`Weather for ${city}`);在笔记本电脑上,你可以在命令前写入一个环境变量,让它只对这次运行生效:CITY=Oslo node weather.js 会输出 Weather for Oslo,而直接运行 node weather.js 会输出 Lisbon。变量名区分大小写。代码旁边的终端不会设置任何变量,所以它总是显示默认值。
挑战
简单你的笔记应标明所属人的姓名。姓名来自环境变量,也就是 shell 传递给程序的命名设置,而不是命令后输入的文字。
- 在
notes.js中的list分支里,读取环境变量NOTES_OWNER。 - 在
No notes yet之前,打印一行标题:Notes for后面跟着所有者的姓名。如果没有设置NOTES_OWNER,就使用单词you代替姓名。
设置 NOTES_OWNER 为 Ada 时,list 会打印:
Notes for Ada
No notes yet未设置 NOTES_OWNER 时,会打印:
Notes for you
No notes yet其他命令保持不变。
试试看:在 $ node notes.js 后面的输入框中输入 list,然后按 Enter。你会先看到 Notes for you,再看到 No notes yet。这里的终端无法设置环境变量,所以你总会看到 you。按下“检查”时,检查也会使用设置为 Ada 和 Grace 的 NOTES_OWNER 来运行 list,并期待输出 Notes for Ada 和 Notes for Grace。在笔记本电脑上,你可以用 NOTES_OWNER=Ada node notes.js list 来试试。
亲手试试
// 你的笔记工具从这里开始。
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 {
if (command) {
console.error(`Unknown command: ${command}`);
}
console.error('Usage: node notes.js <command> [words]');
process.exit(1);
}
Node.js 基础中的所有课
自己练习: Express 在线编辑器