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 相关文章推荐
Web版彷 Visual Studio 2003 颜色选择器
Jan 09 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
Aug 27 Javascript
javascript中使用未定义变量或值的情况分析
Jul 19 Javascript
基于JavaScript实现点击页面任何位置返回
Aug 31 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 08 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
浅析JavaScript中的变量提升
Jun 01 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设计模式 Template (模板模式)
2011/06/26 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
会计专业毕业生自我评价
2013/09/25 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
打架检讨书
2015/01/27 职场文书
公司财务管理制度
2015/08/04 职场文书
员工聘用合同范本
2015/09/21 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB
7个关于Python的经典基础案例
2021/11/07 Python
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP