搜索

有思俱乐部学习园地

Node.js Readline

Readline是Node.js里实现标准输入输出的封装好的模块,通过这个模块我们可以以逐行的方式读取数据流。使用require(“readline”)可以引用模块。

创建Readline实例

readline.createInterface(options)

创建一个readline的接口实例. 接受一个Object类型参数,可传递以下几个值:

var readline = require(‘readline’); 
var rl = readline.createInterface({ 
input: process.stdin, 
output: process.stdout 
});

接口

rl.close()

关闭接口实例 (Interface instance), 放弃控制输入输出流。”close” 事件会被触发

rl.pause()

暂停 readline 的输入流 (input stream), 如果有需要稍后还可以恢复。

rl.prompt[preserveCursor]

为用户输入准备好readline,将现有的setPrompt选项放到新的一行,让用户有一个新的地方开始输入。将preserveCursor设为true来防止光标位置被重新设定成0。

rl.question(query, callback)

预先提示指定的query,然后用户应答后触发指定的callback。 显示指定的query给用户后,当用户的应答被输入后,就触发了指定的callback

rl.resume()

恢复 readline 的输入流 (input stream).

rl.setPrompt(prompt)

设置提示符,例如当你在命令行运行 node 时,你会看到(prompt)

rl.write(data[, key]

第一个简单的readline案例

var readline = require('readline');
var rl = readline.createInterface(process.stdin,process.stdout);

// question方法
rl.question('what is you name? ',function(answer){
  console.log('my name is ' + answer);
  //不加close,则不会结束
  rl.close();
});
// close事件监听
rl.on('close',function(){
  console.log('欢迎下次再来');
  process.exit(0);
});

类似命令行的输入出

var readline = require('readline');
var rl = readline.createInterface(process.stdin,process.stdout);
rl.setPrompt('please>');
rl.prompt();
rl.on('line',(line)=>{
  switch(line.trim()){
    case 'pause':
      rl.pause();
      break;
    case 'copy':
      console.log('复制');
      break;
    case 'hello':
        rl.write("Write");
        console.log('world!');
        break;
    default:
      console.log('没有找到命令');
      break;
  }
  rl.prompt();
});

rl.on('close',function(){
  console.log('欢迎下次再来');
  process.exit(0);
});
rl.on('pause', function() {
  console.log('Readline 输入暂停.');
});

事件:’line’

function (line) {}

在 input 流接受了一个 \n 时触发,通常在用户敲击回车或者返回时接收。 这是一个监听用户输入的利器。

example:

rl.on('line', (cmd) => {
  console.log(`You just typed: ${cmd}`);
});

事件:’pause’

function () {}

不论何时,只要输入流被暂停就会触发。 同样当输入流未被暂停,但收到 SIGCONT 也会触发。 (详见 SIGTSTP 和 SIGCONT 事件)

example:

rl.on('pause', function() {
  console.log('Readline 输入暂停.');
});

事件: ‘resume’

function () {}

不论何时,只要输入流重新启用就会触发。

example:

rl.on('resume', function() {
  console.log('Readline 恢复.');
});

事件:’close’

function () {}

当 close() 被调用时触发。
当 input流接收到”结束”事件时也会被触发. 一旦触发,应当认为Interface实例 “结束” . 例如, 当input流接收到^D时, 分别被认为EOT.
当 input 流接收到一个 ^C 时,即使没有 SIGINT 监听器,也会触发这个事件,分别被称为 SIGINT 。

example:

rl.on('close',function(){
  console.log('欢迎下次再来');
  process.exit(0);
});

工作人员

 
               
作者:XXX
信息录入:XXX
文案编辑:XXX
视频录制:XXX
视频编辑:XXX
图片编辑:XXX
关键字修改:陈鑫