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 单选框,多选框美化代码
Aug 01 Javascript
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
Vue.js实现列表清单的操作方法
Nov 15 Javascript
Angular路由ui-router配置详解
Aug 01 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
Jun 19 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
ucenter通信原理分析
2015/01/09 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
axios基本入门用法教程
2017/03/25 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python3 爬取图片的实例代码
2018/11/06 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
写自荐信的七个技巧
2013/10/15 职场文书
房地产管理毕业生自荐信
2013/11/04 职场文书
学院书画协会部门岗位职责
2013/12/01 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
活动总结怎么写啊
2014/05/07 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技