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 相关文章推荐
jquery 图片Silhouette Fadeins渐显效果
Feb 07 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
JSONP之我见
Mar 24 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
Jun 08 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
javascript添加前置0(补零)的几种方法
Jan 05 Javascript
js实现无缝滚动图
Feb 22 Javascript
关于axios返回空对象的问题解决
Apr 04 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 jQuery
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与ASP
2006/10/09 PHP
PHP新手入门学习方法
2011/05/08 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
php中namespace use用法实例分析
2016/01/22 PHP
分享php多功能图片处理类
2016/05/15 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python中的super()方法使用简介
2015/08/14 Python
用Python设计一个经典小游戏
2017/05/15 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
附答案的Java面试题
2012/11/19 面试题
2014中学教师节广播稿
2014/09/10 职场文书
2015年新学期寄语
2015/02/26 职场文书
以权谋私检举信范文
2015/03/02 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书