Node.js用readline模塊實(shí)現(xiàn)輸入輸出
什么是Readline
Readline是Node.js里實(shí)現(xiàn)標(biāo)準(zhǔn)輸入輸出的封裝好的模塊,通過(guò)這個(gè)模塊我們可以以逐行的方式讀取數(shù)據(jù)流。使用require("readline")可以引用模塊。
如何使用Readline
以使用為角度的話,學(xué)習(xí)Readline,我們需要學(xué)習(xí)它的三個(gè)部分:
- 創(chuàng)建Readline實(shí)例
- 學(xué)習(xí)里面的接口方法
- 學(xué)習(xí)監(jiān)聽(tīng)與處理Readline事件
下面我們通過(guò)實(shí)例來(lái)學(xué)習(xí)這三個(gè)部分。
實(shí)例1:我叫小明
代碼如下:
/** * Created by Administrator on 2015/9/10. */ // 引入readline模塊 var readline = require('readline'); //創(chuàng)建readline接口實(shí)例 var rl = readline.createInterface({ input:process.stdin, output:process.stdout }); // question方法 rl.question("你叫什么?",function(answer){ console.log("名字是:"+answer); // 不加close,則不會(huì)結(jié)束 rl.close(); }); // close事件監(jiān)聽(tīng) rl.on("close", function(){ // 結(jié)束程序 process.exit(0); });
上面的實(shí)例用到了我們需要學(xué)習(xí)到的三個(gè)部分,首先使用了createInterface
創(chuàng)建了一個(gè)接口實(shí)例,然后使用了question
方法來(lái)詢問(wèn)姓名,最后是監(jiān)聽(tīng)readline
的close
事件,因?yàn)闊o(wú)論是方法名和事件的監(jiān)聽(tīng)的名字都比較直觀,關(guān)于它們的作用也能一目了然,我這里就只提了三點(diǎn)需要注意的:
- 在
createInterface
里,我們需要傳入標(biāo)準(zhǔn)輸入輸出作為數(shù)據(jù)的輸入輸出流
- 在
question
方法的回調(diào)函數(shù)里,我們可以獲取到用戶的輸入并進(jìn)行處理,同時(shí)我們進(jìn)行了close
操作來(lái)結(jié)束程序,否則程序不會(huì)結(jié)束
- 在
close
事件的監(jiān)聽(tīng)里,我們執(zhí)行了process.exit(0)
來(lái)使程序退出的操作,因?yàn)?code>readline模塊只要一開(kāi)始獲取用戶輸入就不會(huì)結(jié)束,必須使用這種直接的方式來(lái)結(jié)束程序
實(shí)例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("復(fù)制"); break; case 'hello': rl.write("Write"); console.log('world!'); break; case 'close': rl.close(); break; default: console.log('沒(méi)有找到命令!'); break; } }); rl.on('close', function() { console.log('bye bye'); process.exit(0); });
'line'事件,這個(gè)事件就是在用戶輸完一行,按下回車后就會(huì)觸發(fā)的事件,它會(huì)將用戶輸入的數(shù)據(jù)通過(guò)回調(diào)函數(shù)傳回來(lái),可在此方法里處理用戶輸入的數(shù)據(jù)
實(shí)例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("復(fù)制"); break; case 'hello': console.log('world!'); break; case 'close': rl.close(); break; default: console.log('沒(méi)有找到命令!'); break; } rl.prompt(); }); rl.on('close', function() { console.log('bye bye!'); process.exit(0); });
運(yùn)行截圖如下:
這個(gè)實(shí)例里出現(xiàn)了兩個(gè)新方法
- 方法
setPromat(promat)
,就是給每一行設(shè)置一個(gè)提示符,就好比window命令行的> ,我們這里設(shè)置的是Test>
promat()
可以算是最重要的方法了,因?yàn)樗朋w現(xiàn)了Readline
的核心作用,以行為單位讀取數(shù)據(jù),premat
方法就是在等待用戶輸入數(shù)據(jù)
- 這里又監(jiān)聽(tīng)了'line' 事件,因?yàn)閜romat方法調(diào)用一次就只會(huì)讀取一次數(shù)據(jù),所以,在這個(gè)方法又調(diào)用了一次
promat
方法,這樣就可以繼續(xù)讀取用戶輸入,從而達(dá)到一種命令行的效果
附錄
這里只寫了三個(gè)比較簡(jiǎn)單的例子來(lái)說(shuō)明Readline
的使用,如果還想要了解更多的關(guān)于Readline
的用法以及更多的方法和事件,可以去看官方的API
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
從零學(xué)習(xí)node.js之模塊規(guī)范(一)
Node.js是一個(gè)基于谷歌瀏覽器JavaScript執(zhí)行環(huán)境建立的一個(gè)平臺(tái),讓JavaScript可以脫離客戶端瀏覽器運(yùn)行,讓 JavaScript具有服務(wù)器語(yǔ)言的能力。從本文開(kāi)始我們進(jìn)行學(xué)習(xí)node.js,這篇文章主要介紹的是node.js中模塊規(guī)范的相關(guān)資料,需要的朋友可以參考下。2017-02-02如何利用nodejs自動(dòng)定時(shí)發(fā)送郵件提醒(超實(shí)用)
這篇文章主要給大家介紹了關(guān)于如何利用nodejs實(shí)現(xiàn)自動(dòng)定時(shí)發(fā)送郵件提醒的相關(guān)資料,這個(gè)功能非常實(shí)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Node.JS用純JavaScript生成圖片或滑塊式驗(yàn)證碼功能
有一些Node.JS圖片生成類庫(kù),比如node-captcha等的類庫(kù),需要c/c++程序生成圖片??缙脚_(tái)部署不是很方便。這里介紹幾個(gè)用純JS實(shí)現(xiàn)的圖片驗(yàn)證碼生成模塊,需要的朋友可以參考下2019-09-09node.js中module模塊的功能理解與用法實(shí)例分析
這篇文章主要介紹了node.js中module模塊的功能理解與用法,結(jié)合實(shí)例形式分析了node.js module模塊的基本功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02node.js Promise對(duì)象的使用方法實(shí)例分析
這篇文章主要介紹了node.js Promise對(duì)象的使用方法,結(jié)合實(shí)例形式分析了node.js中Promise對(duì)象的功能、定義、調(diào)用方法及相關(guān)使用技巧,需要的朋友可以參考下2019-12-12node.js中的fs.futimesSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.futimes方法使用說(shuō)明,本文介紹了fs.futimesSync方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程
本文主要介紹了Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05