Node.js学习六(readline)

article/2025/9/22 13:14:46

文章目录

  • 一、什么是readline
  • 二、如何使用readline
    • 1、Interface类
    • 2、close事件
    • 3、readline.createInterface(options)
  • 三、实例:输入输出
  • 四、示例:模拟命令行的输入输出


一、什么是readline

       readline是Node.js里实现标准输入输出的封装好的模块,通过这个模块我们可以以逐行的方式读取数据流。
       readline 模块提供了用于从可读流(例如 process.stdin)每次一行地读取数据的接口。 可以使用以下方式访问它:

const readline = require('readline');

二、如何使用readline

创建readline实例
调用相关的接口方法
监听与处理readline事件
举例如下:

//引入readline模块
const readline = require('readline');
//创建readline接口实例
let r1 = readline.createInterface({input:process.stdin,output:process.stdout
});
//使用question方法
r1.question('你想吃什么?',function (anwser){console.log(`我想吃${anwser}`);//添加close事件,不然不会结束r1.close();
});
//close事件监听
r1.on('close',function (){//结束程序process.exit(0);
});

结果如下:
在这里插入图片描述
第一步:createInterface创建了一个接口实例
第二步:调用相关方法,如question方法输入
第三步:监听readline的close事件
注意:
(1)在createInterface里,需要传入标准输入输出作为数据的输入输出流;
(2)在question方法的回调函数里,可以获取到用户的输入并进行处理,同时进行了close操作来结束程序,否则程序不会结束;
(3)在close事件的监听里,执行了process.exit(0)来使程序退出的操作,因为readline模块只要一开始获取用户输入就不会结束,必须使用这种直接的方式来结束程序。

1、Interface类

继承自: < EventEmitter >

      readline.Interface 类的实例是使用 readline.createInterface() 方法构造的。 每个实例都与单个 input 可读流和单个 output 可写流相关联。 output 流用于打印到达并从 input 流中读取的用户输入的提示。

2、close事件

发生以下情况之一时会触发close事件:
(1)rl.close() 方法被调用,readline.Interface 实例放弃了对 input 和 output 流的控制;
(2)input 流接收到它的 ‘end’ 事件;
(3)input 流接收 Ctrl+D 以发出传输结束(EOT)的信号;
(4)input 流接收 Ctrl+C 以发出 SIGINT 信号,并且在 readline.Interface 实例上没有注册 ‘SIGINT’ 事件监听器。
调用监听器函数时不传入任何参数。
一旦触发 ‘close’ 事件,则 readline.Interface 实例就完成了。

3、readline.createInterface(options)

options < Object >
input <stream.Readable> 要监听的可读流。 此选项是必需的。
output <stream.Writable> 要将逐行读取的数据写入的可写流。
completer < Function > 可选的用于制表符自动补全的函数。

三、实例:输入输出

      line事件,这个事件就是在用户输完一行,按下回车后就会触发的事件,它会将用户输入的数据通过回调函数传回来,可在此方法里处理用户输入的数据。

//引入readline模块
const readline = require('readline');
//创建readline接口实例
let r1 = readline.createInterface({input:process.stdin,output:process.stdout
});
//注册line事件
r1.on('line',function (line){switch(line.trim()){case 'copy':console.log('复制');break;case 'hello':r1.write('write');console.log('world');break;case 'close':r1.close();break;default:console.log('没有找到命令');break;}
});
//close事件监听
r1.on('close',function (){console.log('----end----');process.exit(0);
});

在这里插入图片描述

trim()的作用是去除字符串两边的空白

四、示例:模拟命令行的输入输出

const readline = require('readline');
const r1 = readline.createInterface({input:process.stdin,output:process.stdout
});
//就是给每一行设置一个提示符test
r1.setPrompt('test');
//prompt方法就是在等待用户输入数据
r1.prompt();
r1.on('line',function (line){switch(line.trim()){case 'copy':console.log('复制');break;case 'hello':console.log('world');break;case 'close':r1.close();break;default:console.log('没有找到命令');break;}//此处的r1.prompt()监听了'line' 事件,因为prompt方法调用//一次就只会读取一次数据,所以,在这个方法又调用了一次//prompt方法,这样就可以继续读取用户输入,从而达到一种命令//行的效果。r1.prompt();
});
r1.on('close',function (){console.log('----end----');process.exit(0);
});

方法setPromat(promat) ,就是给每一行设置一个提示符,就好比window命令行的> ,这里设置的是test。

prompt()是最重要的方法,因为它体现了readline的核心作用,以行为单位读取数据,prompt方法就是在等待用户输入数据。

结果如图:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/9tkXtmc0.shtml

相关文章

java以前版本下载方式

java以前版本下载 1.创建Oracle账号 2.网址https://www.oracle.com/java/technologies/downloads/archive/

java -version

一、JDK下载 1.官网下载 点击官网下载地址 往下划&#xff0c;找到自己电脑相对应的JDK&#xff0c;点击下载。 二、安装步骤 初学者建议傻瓜式安装&#xff0c;直接点击下一步即可。 三、搭配环境变量 1.Path变量 解决方法&#xff1a;配置Path变量。 右键点击“此电脑”&…

最全的Java版本历史

JDK 1.0&#xff08;1996&#xff09; Sun公司发布Java1.0&#xff0c;发布初期叫Oak&#xff0c;后改名为Java&#xff08;JDK1.0基本上只支持Java语言基础特性&#xff09; JDK 1.1&#xff08;1997&#xff09; 引入内部类引入JDBC&#xff1a; 是Java语言中用来规范客户…

JDK各个版本的区别

jdk1.5的新特性&#xff1a; 1. 泛型 ArrayList listnew ArrayList()------>ArrayList<Integer>listnew ArrayList<Integer>(); 2 自动装箱/拆箱 nt ilist.get(0).parseInt();-------->int ilist.get(0);原始类型与对应的包装类不用显式转换 3 for-eac…

Java 版本区分

Java分为如下三个版本&#xff1a; Java SE&#xff1a;Standard Edition&#xff1a; Java SE就是标准版&#xff0c;包含标准的JVM和标准库。 Java EE&#xff1a;Enterprise Edition 而Java EE是企业版&#xff0c;它只是在Java SE的基础上加上了大量的API和库&#xff0c;…

更换Java版本

当windows系统中存在多个java版本时&#xff0c;怎么切换&#xff1f; 如果是1.7以前的版本&#xff0c;则直接修改环境变量JAVA_HOME&#xff1b; 如果是1.7及以后的&#xff0c;则可能要修改C:\ProgramData\Oracle\Java\javapath 中的三个java&#xff0c;可重命名&#xff…

JAVA版本号的问题 Java版本号与JDK版本

初学Java时便一直疑惑Java版本号到底是如何命名的&#xff1f;时常在网上看到Java5、Java6、Java7、Java8 (到今天已经到了Java12了&#xff0c;2019.4.5) 这一类 “Java X” 的Java版本名称&#xff0c;同时又会看到诸如JDK1.5、JDK1.6这中 “JDK1.X” 的JDK叫法。一直以来都在…

查看java/jdk版本

查看当前电脑的Java/JDK版本的方法 1.winR 打开运行窗口&#xff0c;输入 cmd 2.在控制台中输入java --version或者java -version&#xff0c;即可查看Java版本号 Java所有版本 版本号发布日期JDK Version 1.01996-01-23 Oak(橡树)JDK Version 1.11997-02-19JDK Version …

java的所有版本

图解 最开始 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。 Oak也是一种精简的语言&#xff0c;程序非常小&#xff0c;适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet&#xff08;Applet是一种将小程序嵌…

JDK版本区别

1. 泛型 ArrayList listnew ArrayList()------>ArrayList<Integer>listnew ArrayList<Integer>(); 2 自动装箱/拆箱 nt ilist.get(0).parseInt();-------->int ilist.get(0);原始类型与对应的包装类不用显式转换 3 for-each i0;i<a.length;i------------&…

Java版本和JDK版本

转载 对于Java初学者&#xff0c;经常会听到同事&#xff0c;或看到网上Java版本和JDK版本不一的叫法&#xff0c;不明白这两者到底什么关系&#xff1f;其实博主当年初学Java时也有这样的困惑&#xff0c;今天我们就来好好探讨一下&#xff0c;如有不对之处&#xff0c;请加以…

JAVA版本号的问题——Java版本号与Jdk版本

初学Java时便一直疑惑Java版本号到底是如何命名的&#xff1f;时常在网上看到Java5、Java6、Java7、Java8 (到今天已经到了Java12了&#xff0c;2019.4.5) 这一类 “Java X” 的Java版本名称&#xff0c;同时又会看到诸如JDK1.5、JDK1.6这中 “JDK1.X” 的JDk叫法。一直以来都在…

Java各个版本区别

参考资料 一文彻底搞懂令人疑惑的Java和JDK的版本命名&#xff01; Java–Java版本和JDK版本 1. Java SE、java EE、Java ME三个版本 1.1 Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09;Java标准版 Java SE 是做电脑上运行的软件。 Java se 以前…

Java各版本比较(Java SE、java EE、Java ME)

文章目录 1. 概述2. 版本比较2.1 Java SE、java EE、Java ME2.2 JDK、J2SE、Java SE2.3 JDK、JRE、Java SE API2.4 JDK、JRE、JRE、JIT2.5 Java ME、Java SE、Java EE、Java Card 来源 1. 概述 java是作为长时间流行的语言&#xff0c;在这过程中出现了很多版本&#xff0c;各…

Java--Java版本和JDK版本

对于Java初学者&#xff0c;经常会听到同事&#xff0c;或看到网上Java版本和JDK版本不一的叫法&#xff0c;不明白这两者到底什么关系&#xff1f;其实博主当年初学Java时也有这样的困惑&#xff0c;今天我们就来好好探讨一下&#xff0c;如有不对之处&#xff0c;请加以指正&…

【SpringBoot整合缓存】-----Redis缓存篇

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringBoot相关知识相关知识&#xff0c;打造完整的SpringBoot学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#xff0c;也…

SpringBoot 开启Redis缓存

文章目录 Redis缓存主要步骤具体实践整体目录结构pom.xml添加依赖yml文件里配置Redis集群编写RedisConfig配置序列化及缓存配置&#xff0c;添加缓存注解编写业务Controller编写启动类 检验结果 之前不是说过Redis可以当作缓存用嘛 现在我们就配置一下SpringBoot使用Redis的缓存…

Windows下清理redis缓存

Windows下清理某个redis库的所有数据 1、找到redis的安装目录 2、找到redis-cli.exe&#xff0c;双击运行 3、登录redis&#xff1a;输入命令&#xff1a;auth 密码 4、登录成功&#xff1a;当前默认为数据库0 5、切换数据库&#xff1a;select 1/2/3&#xff08;切换数据库为…

redis缓存穿透

ps:想只读有效信息&#xff0c;见红字 正常情况 当在高并发&#xff0c;高性能&#xff0c;降低数据库压力的情况下&#xff0c;首先会选择redis作为缓存机制&#xff0c;当有大量请求需要查询数据库时&#xff0c;为了降低数据库的压力&#xff0c;并提高请求查询性能&#…

linux下清理redis缓存

输入命令&#xff0c;连接到redis 服务端 redis-cli -h 127.0.0.1 -p 6379#不用切换到redis的bin下面&#xff0c; 是因为安装redis 时已经配置了系统变量验证登录密码&#xff0c; auth 你的redis密码 开始清理缓存&#xff0c;清理命令如下 指定redis片区&#xff1a; selec…