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 相关文章推荐
用javascript实现页面打印的三种方法
Mar 05 Javascript
js实现单一html页面两套css切换代码
Apr 11 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
浅析BootStrap Treeview的简单使用
Oct 12 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
微信小程序功能之全屏滚动效果的实现代码
Nov 22 Javascript
Vue运用transition实现过渡动画
May 06 Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 Javascript
javascript递归函数定义和用法示例分析
Jul 22 Javascript
js数组的基本使用总结
Jan 18 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
js tab效果的实现代码
2009/12/26 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
python进阶教程之异常处理
2014/08/30 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
pandas string转dataframe的方法
2018/04/11 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python登录注册验证功能实现
2018/06/18 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python守护进程实现过程详解
2020/02/10 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
本科毕业生自荐信
2014/06/02 职场文书
优秀家长自荐材料
2014/08/26 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
店面出租协议书范本
2014/11/28 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
不同意离婚答辩状
2015/05/22 职场文书
追悼会答谢词范文
2015/09/29 职场文书
php修改word的实例方法
2021/11/17 PHP