Node.js用readline模块实现输入输出


Posted in Javascript onDecember 16, 2016

什么是Readline

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

如何使用Readline

以使用为角度的话,学习Readline,我们需要学习它的三个部分:

  1. 创建Readline实例
  2. 学习里面的接口方法
  3. 学习监听与处理Readline事件

下面我们通过实例来学习这三个部分。

实例1:我叫小明

代码如下:

/**
 * Created by Administrator on 2015/9/10.
 */
// 引入readline模块
var readline = require('readline');

//创建readline接口实例
var rl = readline.createInterface({ 
 input:process.stdin,
 output:process.stdout
});

// question方法
rl.question("你叫什么?",function(answer){ 
 console.log("名字是:"+answer);
 // 不加close,则不会结束
 rl.close();
});

// close事件监听
rl.on("close", function(){ 
 // 结束程序
 process.exit(0);
});

上面的实例用到了我们需要学习到的三个部分,首先使用了createInterface创建了一个接口实例,然后使用了question方法来询问姓名,最后是监听readlineclose事件,因为无论是方法名和事件的监听的名字都比较直观,关于它们的作用也能一目了然,我这里就只提了三点需要注意的:

  1. createInterface里,我们需要传入标准输入输出作为数据的输入输出流
  2. question方法的回调函数里,我们可以获取到用户的输入并进行处理,同时我们进行了close操作来结束程序,否则程序不会结束
  3. close事件的监听里,我们执行了process.exit(0)来使程序退出的操作,因为readline模块只要一开始获取用户输入就不会结束,必须使用这种直接的方式来结束程序

实例2:输入与输出

/**
 * Created by Administrator on 2015/9/10.
 */
// 引入readline模块
var readline = require('readline');

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

rl.on('line', function(line){ 
 switch(line.trim()) {
  case 'copy':
   console.log("复制");
   break;
  case 'hello':
   rl.write("Write");
   console.log('world!');
   break;
  case 'close':
   rl.close();
   break;
  default:
   console.log('没有找到命令!');
   break;
 }
});
rl.on('close', function() { 
 console.log('bye bye');
 process.exit(0);
});

'line'事件,这个事件就是在用户输完一行,按下回车后就会触发的事件,它会将用户输入的数据通过回调函数传回来,可在此方法里处理用户输入的数据

实例3:类似命令行的输入输出

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

rl.setPrompt('Test> '); 
rl.prompt();

rl.on('line', function(line) { 
 switch(line.trim()) {
  case 'copy':
   console.log("复制");
   break;
  case 'hello':
   console.log('world!');
   break;
  case 'close':
   rl.close();
   break;
  default:
   console.log('没有找到命令!');
   break;
 }
 rl.prompt();
});

rl.on('close', function() { 
 console.log('bye bye!');
 process.exit(0);
});

运行截图如下:

Node.js用readline模块实现输入输出

这个实例里出现了两个新方法

  1. 方法setPromat(promat) ,就是给每一行设置一个提示符,就好比window命令行的> ,我们这里设置的是Test>
  2. promat()可以算是最重要的方法了,因为它才体现了Readline的核心作用,以行为单位读取数据,premat方法就是在等待用户输入数据
  3. 这里又监听了'line' 事件,因为promat方法调用一次就只会读取一次数据,所以,在这个方法又调用了一次promat方法,这样就可以继续读取用户输入,从而达到一种命令行的效果

附录

这里只写了三个比较简单的例子来说明Readline的使用,如果还想要了解更多的关于Readline的用法以及更多的方法和事件,可以去看官方的API

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
Mar 24 Javascript
jQuery基础知识小结
Dec 22 Javascript
使用纯javascript实现放大镜效果
Mar 18 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
Node.js文件操作方法汇总
Mar 22 Javascript
浏览器复制插件zeroclipboard使用指南
Mar 26 Javascript
基于javascript实现tab切换特效
Mar 29 Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
vue.js评论发布信息可插入QQ表情功能
Aug 08 Javascript
10种JavaScript最常见的错误(小结)
Jun 21 Javascript
Element Notification通知的实现示例
Jul 27 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 #Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 #Javascript
概述jQuery中的ajax方法
Dec 16 #Javascript
JS数组排序方法实例分析
Dec 16 #Javascript
jquery UI Datepicker时间控件冲突问题解决
Dec 16 #Javascript
详解jQuery简单的表单应用
Dec 16 #Javascript
浅谈JavaScript的自动垃圾收集机制
Dec 15 #Javascript
You might like
介绍php设计模式中的工厂模式
2008/06/12 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
PHP中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
Django框架下在视图中使用模版的方法
2015/07/16 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
使用Python来开发微信功能
2018/06/13 Python
python xpath获取页面注释的方法
2019/01/14 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
2014年党员公开承诺书范文
2014/03/28 职场文书
廉政教育的心得体会
2014/09/01 职场文书
创建文明城市倡议书
2015/04/28 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Python实现byte转integer
2021/06/03 Python
Python中的套接字编程是什么?
2021/06/21 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技