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 相关文章推荐
js 走马灯简单实例
Nov 21 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
详解用node.js实现简单的反向代理
Jun 26 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 Javascript
基于vue手写tree插件的那点事儿
Aug 20 Javascript
js+css实现全屏侧边栏
Jun 16 Javascript
微信小程序的引导页实现代码
Jun 24 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
Jul 28 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 zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
ThinkPHP之getField详解
2014/06/20 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
js操作数组函数实例小结
2015/12/10 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
生日派对邀请函
2014/01/13 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
安全目标责任书
2014/07/22 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
护士年终考核评语
2014/12/31 职场文书
谢师宴学生致辞
2015/07/27 职场文书
销售口号霸气押韵
2015/12/24 职场文书
《失物招领》教学反思
2016/02/20 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL