输入
了解 Node.js 中的各种输入方法。
命令行输入
我们从最基础的输入形式——命令行输入开始。根据你使用终端的熟悉程度,你可能已经了解如何通过终端向程序传递输入,也可能还不太清楚。让我们先来看看具体怎么做。
假设我们有一个名为 app.js 的简单程序。这个程序会打印出你传入的任何内容。你只需在终端中程序名称后添加参数即可传递这些参数。尝试运行命令 node app.js Hello。点击 RUN 按钮开始体验。
No configuration found for ID: 495862b406df357005a5784810170314d8d3507d8b6b4346694afd9d5c1ff3f1
在这个简单示例中,只有一行代码。你可能还记得在第一课中的 console.log。console 是一个非常灵活的模块,我们将在后续章节中深入探讨。而当前我们要重点关注的是 process 模块,特别是 process.argv。你可能会好奇为什么 argv 后面有方括号中的 2。这是因为所有命令行参数都会被传递给 argv 属性。
- 第一个参数 0 是
process.execPath,即 Node 可执行文件的路径。 - 第二个参数 1 是正在运行的 JavaScript 文件路径。
- 之后的参数(如果有)就是命令行传入的参数。在我们的例子中,这只是一个简单的
Hello。
尝试取消注释第 2 行到第 4 行的代码,以便了解这些索引的具体含义。
我们还有像 yargs 这样的工具包,可以更轻松地解析命令行参数。
控制台输入
在 Node.js 中,我们通常不需要在程序中使用控制台输入,因为大多数情况下我们处理的是具有易用前端的程序。但有时确实需要从控制台获取输入。为此,我们可以使用 readline 模块。让我们看看它是如何工作的。点击 RUN 按钮开始。
No configuration found for ID: 6e11ca101121cc6cafba155f0b27b6962797f5d1e131946af5c3be0a7598b127
让我们逐步分析代码:
- 第 1 行:我们导入了
readline模块,以便在代码中使用它。 readline模块需要一个“接口”来工作。这个接口可以是文件,也可以是我们的控制台。我们希望从控制台获取输入,并将信息输出到控制台。在 Node.js 中,process对象提供了两个属性:stdin用于输入,stdout用于输出。我们使用createInterface方法创建一个新的readline.Interface实例,并将其保存为rl(第 3 行)。- 第 8 行定义了我们的
query,这是将在控制台上显示的内容。 readline.Interface提供了一个名为question的方法,用于从控制台向用户提出问题。question方法接收一个之前定义的query字符串和一个callback回调函数。回调函数的第一个参数就是用户输入的内容。- 我们的
callback函数是一个简单的console.log(),其中包含用反引号包裹的${answer}。反引号中的${answer}会被实际输入的内容替换(第 11 行)。 - 一个非常重要的方法
rl.close()在第 13 行被调用。该方法通知接口我们已完成控制台的输入输出操作,Node.js 可以继续执行后续逻辑。
虽然看起来一下子接触到了很多信息,但随着课程的推进,这些概念会逐渐变得清晰。我们将在接下来的课程中详细讨论上述提到的大部分技术术语。
