📜  在终端 nodejs 中获取输入 - Javascript (1)

📅  最后修改于: 2023-12-03 15:08:05.141000             🧑  作者: Mango

在终端 Node.js 中获取输入 - JavaScript

在 Node.js 中,可以通过 process 对象中的 stdin 流来从终端获取输入。stdin 是一个可读的流,可以使用它的 on 方法绑定 data 事件来监听输入事件。该事件每次读取一行输入数据,并将其作为字符串传递给回调函数。

process.stdin.on('data', (input) => {
  // 处理输入
});

在上述代码中,回调函数接收一个输入字符串作为参数,此时需要进行相应的处理,例如打印出来或者进行其他操作。

获取单行输入

要获取单行输入,可以使用 readline 模块来处理输入流。在输入事件回调函数中,通过 readline 模块的 createInterface 方法创建一个读取器对象,然后使用其 question 方法来提示用户输入,当用户输入完成后,将回调函数接收到的输入字符串传递给自定义的处理函数。

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('请输入你的名字:', (name) => {
  console.log(`你好,${name}`);
  rl.close();
});

在上述代码中,先创建一个 readline 模块的接口对象 rl,并通过其 question 方法询问用户输入,当用户输入完成后,将其传递给处理函数。

获取多行输入

如果要获取多行输入,则需要连续处理多个输入事件,直到结束标记(例如空行)出现为止。在输入事件回调函数中,根据已经接收到的输入,判断是否需要继续等待输入,如果需要等待,则调用 readline 模块的 question 方法继续提示用户输入。

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

let input = '';

rl.setPrompt('请输入一些内容(以空行结束):\n');
rl.prompt();

rl.on('line', (line) => {
  if (line.trim() === '') {
    console.log(`已经接收到输入:\n${input}`);
    rl.close();
    return;
  }
  input += line + '\n';
  rl.setPrompt(`当前输入:\n${input}请输入下一行:`);
  rl.prompt();
});

在上述代码中,先创建一个 readline 模块的接口对象 rl,并设置提示符和第一次提示用户输入。然后在输入事件回调函数中,根据已经接收到的输入(即 input 变量中保存的内容),判断是否需要继续等待输入。如果需要等待,则调用 readline 模块的 question 方法继续提示用户输入。当用户输入结束时,将已经接收到的输入作为字符串打印出来。

结论

Node.js 中可以通过 process.stdin 流来从终端获取输入,可通过 readline 模块来处理输入流,实现单行或多行输入。在使用 readline 模块时,需要先创建一个 readline.Interface 对象,并通过其提供的方法来提示用户输入,处理输入内容。