Node.js Readline() 模块
Node.js 中的Readline 模块允许逐行读取输入流。该模块封装了处理标准输出和处理标准输入对象。 Readline 模块使输入和读取用户给出的输出变得更容易。要使用此模块,请创建一个新的 JavaScript 文件并在应用程序开始时编写以下代码 -
var readline = require('readline');
Readline 模块带有与用户交互的不同方法。
与用户的交互:对于交互,我们将首先为输入和输出创建一个接口。要创建接口,请编写以下代码 -
javascript
var readline = require('readline');
var rl = readline.createInterface(
process.stdin, process.stdout);
javascript
rl.question('What is your age? ', (age) => {
console.log('Your age is: ' + age);
});
javascript
rl.question('What is your age? ', (age) => {
console.log('Your age is: ' + age);
rl.close();
});
javascript
var readline = require('readline');
var rl = readline.createInterface(
process.stdin, process.stdout);
rl.setPrompt(`What is your age? `);
rl.prompt()
javascript
var readline = require('readline');
var rl = readline.createInterface(
process.stdin, process.stdout);
rl.setPrompt(`What is your age? `);
rl.prompt();
rl.on('line', (age) => {
console.log(`Age received by the user: ${age}`);
rl.close();
});
javascript
rl.on('line', (input) => {
console.log(`Input Received: ${input}`);
rl.close();
});
javascript
rl.on('pause', () => {
console.log('Paused Event is invoked');
});
javascript
rl.on('resume', () => {
console.log('Resume Event is invoked.');
});
javascript
rl.on('SIGINT', () => {
rl.question('Exit (y or n)? ', (input) => {
if (input.match(/^y(es)?$/i)) { rl.pause(); }
});
});
javascript
rl.on('SIGTSTP', () => {
console.log('SIGTSTP event is invoked.');
})
javascript
rl.on('SIGCONT', () => {
console.log('SIGCONT event is invoked.');
rl.prompt();
})
这里, createInterface()方法有两个参数。第一个参数用于标准输入,第二个参数用于读取标准输出。
javascript
rl.question('What is your age? ', (age) => {
console.log('Your age is: ' + age);
});
在这里, rl.question()方法用于向用户提问并阅读他们的回复(输出)。第一个参数用于提问,第二个参数是一个回调函数,它将用户的输出作为参数返回到控制台。
上述代码的输出将是 -
What is your age? 20
Your age is: 20
在这里,问题是它不会退出应用程序,它会继续要求输入。为了解决这个问题,使用了 rl.close()方法。此方法将关闭界面。要在应用程序中使用它,请编写以下内容 -
javascript
rl.question('What is your age? ', (age) => {
console.log('Your age is: ' + age);
rl.close();
});
我们也可以使用一个setPrompt()方法来设置特定的语句到控制台。 prompt()方法用于显示在 setPrompt() 方法中设置的语句。因此,编写以下代码 -
javascript
var readline = require('readline');
var rl = readline.createInterface(
process.stdin, process.stdout);
rl.setPrompt(`What is your age? `);
rl.prompt()
此代码将接受用户的输入。现在,我们需要一个监听器来读取用户的输入并将其显示到控制台。为此, Readline Module调用了一个侦听器方法,该方法将采用两个参数。第一个参数是事件,第二个参数是一个回调函数,它将输出返回到控制台。例如 -
javascript
var readline = require('readline');
var rl = readline.createInterface(
process.stdin, process.stdout);
rl.setPrompt(`What is your age? `);
rl.prompt();
rl.on('line', (age) => {
console.log(`Age received by the user: ${age}`);
rl.close();
});
在这里, rl.on()方法将第一个参数作为线路事件。每当用户按下 Enter键时,都会调用此事件。上述代码的输出将是 -
What is your age? 20
Age received by the user: 20
事件:除了监听器,readline 模块还带有事件属性。让我们了解各种事件。
- close:当调用rl.close()方法或用户按ctrl + c关闭界面时,将调用此事件。
- line:每当用户按下Enter或返回键时都会调用此事件。此事件在侦听函数中调用。例如 -
javascript
rl.on('line', (input) => {
console.log(`Input Received: ${input}`);
rl.close();
});
- pause:输入流暂停时调用此事件。例如 -
javascript
rl.on('pause', () => {
console.log('Paused Event is invoked');
});
- 上述代码的输出将是 -
Paused Event is invoked
- resume:只要恢复输入,就会调用此事件。例如 -
javascript
rl.on('resume', () => {
console.log('Resume Event is invoked.');
});
- SIGINT:只要用户按下ctrl + c按钮,就会调用此事件。如果调用 SIGINT 时没有注册事件侦听器,则将调用pause事件。例如 -
javascript
rl.on('SIGINT', () => {
rl.question('Exit (y or n)? ', (input) => {
if (input.match(/^y(es)?$/i)) { rl.pause(); }
});
});
- 如果用户按下ctrl + c键,此代码将询问给定的问题。在这里,如果提供的输入与 y 或 yes 匹配,则将在接口上调用 pause() 方法。
- SIGTSTP:只要用户给出ctrl + z输入,就会调用此事件。此输入称为 SIGTSTP。如果用户没有提供 SIGTSTP 输入,那么当前正在运行的进程将被发送到后台。例如 -
javascript
rl.on('SIGTSTP', () => {
console.log('SIGTSTP event is invoked.');
})
- SIGCONT:当使用SIGTSTP发送到后台的进程再次被带回前面运行的进程时,将调用此事件。例如 -
javascript
rl.on('SIGCONT', () => {
console.log('SIGCONT event is invoked.');
rl.prompt();
})
结论:在本文中,我们了解了 Node.js 中的Readline 模块。此外,我们使用方法、变量、事件和侦听器了解了它的各种实现。