热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node.js之readline模塊的運用

什麼是readlinereadline許可從可讀流中以逐行的體式格局讀取數據,比方process.stdin等。在node.js敕令行形式下默許引入了readline模塊,但假如是

什麼是readline

readline許可從可讀流中以逐行的體式格局讀取數據,比方process.stdin等。
在node.js敕令行形式下默許引入了readline模塊,但假如是運用node.js運轉劇本的話,則須要本身經過過程require(‘readline’)體式格局手動引入該模塊。

怎樣運用readline

建立實例

  起首、建立一個接口實例,供應一個Object範例的參數。參數以下:
input: 監聽的可讀流(必須)
output: 寫入readline的可寫流(必須)
completer: 用於 Tab 自動補全的可選函數(不經常使用)
terminal: 假如願望 input 和 output 流像 TTY 一樣看待,那末通報參數 true ,而且經過 ANSI/VT100 轉碼。 默許狀況下搜檢 isTTY 是不是在 output 流上實例化。(不經常使用)
historySize: 保存行汗青紀錄最大值,為了禁用該值被設置為0,默許為30,只要在terminal被設置為true或經過過程一個內部輸出搜檢時,這個選項才有作用,不然汗青緩存機制不會初始化。(不經常使用)

第一種體式格局:只傳入兩個必傳參數

const readLine = require('readline');
let rl = readLine.createInterface(process.stdin, process.stdout);

第二種體式格局:能夠傳入其他非必須參數

const readLine = require('readline');
let rl = readLine.createInterface({
input: process.stdin,
output: process.stdout,
// 其他參數省略
})

實例

const readLine = require('readline');
let rl = readLine.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '> 請輸入'
})
// 挪用
rl.prompt(); // 掌握台結果顯現:>請輸入

注重:一旦該代碼被挪用,Node.js順序將不會停止曉得readline接口被封閉,由於接口會在輸入流中不斷的守候數據。

要領

以下一切的實例均根據以下rl所建立:

const readLine = require('readline');
let rl = readLine.createInterface({
input: process.stdin,
output: process.stdout
})

1、rl.setPrompt([prompt])

  設置提醒符,當你運用node運轉該文件,而且挪用rl.prompt()時,會在終端看到你設置的提醒prompt,即“> 請輸入”

rl.setPrompt('> 請輸入')

注重:該要領和上面的實例參數設置是一樣的結果

2、rl.prompt([preserveCursor])

  為用戶輸入準備好readline,將現有的setPrompt選項放到新的一行,讓用戶有一個新的處所最先輸入。將preserveCursor設為true來防備光標位置被從新設定成0。
  如須要換行輸入,即在新的一行,輸入信息,可在prompt中到場n。

rl.prompt(); // 掌握台結果顯現:>請輸入

3、rl.write(data[, key])

  當運用readline.createInterface()建立實例時,,假如輸入流為null或許undefined,則寫入數據到輸出流。
  key是一個示意鍵序列的字面量對象,假如終端是TTY,則可用。

rl.write('Delete me!');
// Simulate ctrl+u to delete the line written previously
rl.write(null, {ctrl: true, name: 'u'});

4、rl.question(query, callback)

  預先制訂提醒內容query,將會在用戶輸入被應對后,觸發實行指定的回掉函數callback。

rl.question('你本年多大了?\n', function(prompt) {
console.log('這是你輸入的回覆結果:' + prompt);
rl.close();
})

5、rl.pause()

  停息readline的輸入流,能夠恢復,rl.resume()、rl.write()、rl.question()和rl.prompt()均能夠恢復該輸入流。
  挪用該要領會觸發pause事宜。

6、rl.resume()

  恢復readline的輸入流。
  挪用該要領會觸發resume事宜。

7、rl.close()

  封閉readline建立的實例,不掌握輸入輸出流。
  挪用該要領會觸發close事宜。

事宜

1、line事宜

  不管什麼時候,在輸入流接收了一個行完畢符(n, r, 或許 rn)時觸發,即在用戶輸入后,按了回車或許返回鍵時觸發該事宜。能夠用來監聽用戶輸入。

rl.on('line', function (line) {
console.log('這是用戶輸入的內容:' + line);
})

2、pause事宜

  輸入流被停息時觸發,即挪用了rl.pause(),或許沒有停息輸入流,在收到 SIGCONT/SIGINT,且readline.Interfacce實例上並沒有註冊SIGCONT/SIGINT監聽器時,也會被觸發,而且假如輸入流在收到SIGTSIP之前就已被停息了,那末該事宜也不會觸發。

rl.on('pause', function() {
console.log('停息輸入流...')
})

3、resume事宜

  輸入流從新啟動時被觸發,即挪用了rl.resume()、或許rl.write()、rl.question()和rl.prompt()。

rl.on('resume', function() {
console.log('恢復輸入流...')
})

4、close事宜

  挪用rl.close()要領時會觸發該事宜,或許輸入流接收到“完畢”事宜。以下的恣意一種狀況都邑觸發close事宜。
一旦close事宜被觸發,則以為readline.Interaface實例已停止。
1)、rl.close()要領被挪用后,readline.Interaface實例便會摒棄輸入輸出流的掌握權。
2)、輸入流接收到本身的“end”事宜。
3)、輸入流接收到-C,發送SIGINT信號,而且在readline.Interfacce實例上並沒有註冊SIGINT事宜的監聽器。
4)、輸入流接收到-D,發送傳輸完畢信號(EOF,end-of-transmission);
5)、EOT:定界符,即輸入單個或多個“>”,並按下回車時。

rl.on('close', function() {
console.log('封閉輸入流...');
process.exit(0); // 退出當前歷程
})

5、SIGCOUT(該事宜在window體繫上不起作用)

  當運用-Z將Node.js歷程移動到背景時,SIGCONT事宜將會被觸發。然後能夠運用 fg(1) 敕令將它移動到前台。
  假如輸入流在收到SIGTSIP之前就已被停息了,那末該事宜就不會觸發。

6、SIGINT

  當輸入流收到-C敕令時,我們熟知的SIGINT事宜就會被觸發。假如當時並沒有註冊任何SIGINT事宜監聽器,那末當輸入流接收到SIGINT信號時,’pause’事宜和’close’事宜均會被觸發。

7、SIGTSTP(該事宜在window體繫上不起作用)

  當輸入流收到-Z敕令時,我們熟知的SIGTSTP事宜就會被觸發。假如沒有註冊SIGTSTP事宜監聽器,那末當輸入流收到SIGTSTP事宜時,Node.js歷程就將會被移動到背景。
  假如輸入在歷程被發送到背景之前就已被停息了,那末’pause’和’SIGCONT’事宜就將不會被觸發。

拜見官方文檔
參考案例看笑話


推荐阅读
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 第14周实践项目(4)-验证平衡二叉树
    问题**Copyright(c)2015,烟台大学计算机学院*Allrightsreserved.*文件名称:test.cpp*作者:王敏*完成日 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Linux 数据流重定向详解
    本文详细介绍了 Linux 系统中的数据流重定向技术,包括标准输出(stdout)、标准错误输出(stderr)和标准输入(stdin)的重定向方法,以及其在实际应用中的具体示例。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
author-avatar
mobiledu2502854827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有