使用readline模塊實現(xiàn)Node.js的輸入輸出

我們在實現(xiàn)命令行程序的時候,不可避免的要獲取鍵盤輸入咱圆。所以這時候我們就可以使用readline模塊來獲取笛辟。下面讓我們了解一下readline功氨。

什么是Readline

Readline是Node.js里實現(xiàn)標準輸入輸出的封裝好的模塊,該模塊提供了一個接口用來從一個可讀的流中讀取數(shù)據(jù)(比如process.stdin)手幢,每次讀取一行捷凄。

在nodejs的命令行模式下默認引入了readline模塊,但是如果要執(zhí)行node.js腳本文件的話還是需要顯示引入readline模塊围来。

注意:readline適合動態(tài)交互式流處理跺涤,類似于C++命令行中的cin和cout。不是我們平常意義上說的按行讀取文件管钳。當流被創(chuàng)建時钦铁,readline只會監(jiān)聽新增的行而忽略已有的行。

使用Readline

我們通過一個實例來學習如何使用Readline才漆,主要包括三個方面

  1. 創(chuàng)建Readline實例
  2. 學習里面的接口方法
  3. 學習監(jiān)聽與處理Readline事件
//引入readline模塊
const readline = require('readline');

//創(chuàng)建readline接口實例
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// question方法
rl.question('Please input a word: ', function(answer){
    console.log('You have entered {%s}', answer.toUpperCase());
    // 不加close牛曹,則不會結(jié)束
    rl.close();
});

運行結(jié)果:

?  toUpperCase git:(master) ? node app.js 
Please input a word: hello
You have entered {HELLO}

通過這個例子,我們已經(jīng)很清晰的看到了Readline的使用方法醇滥。
下面讓我們再看一個例子

var readline = require('readline');
var  rl = readline.createInterface(process.stdin, process.stdout);

/*
*  方法setPromat(promat)黎比,就是給每一行設(shè)置一個提示符,就好比window命令行的> 鸳玩,我們這里設(shè)置的是Test>
*  promat()可以算是最重要的方法了阅虫,因為它才體現(xiàn)了Readline的核心作用,以行為單位讀取數(shù)據(jù)不跟,premat方法就是在等待用戶輸入數(shù)據(jù)
*  這里又監(jiān)聽了’line’ 事件颓帝,因為promat方法調(diào)用一次就只會讀取一次數(shù)據(jù),所以窝革,在這個方法又調(diào)用了一次promat方法购城,這樣就可以繼續(xù)讀取用戶輸入,從而達到一種命令行的效果
*/

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);
});
Test> copy
復制
Test> hello
world!
Test> world
沒有找到命令瘪板!
Test> close
bye bye!


參考資料:官方的API
【Node.js基礎(chǔ)篇】(九)使用readline模塊實現(xiàn)Node.js的輸入輸出
Nodejs進階:readline實現(xiàn)日志分析+簡易命令行工具

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市漆诽,隨后出現(xiàn)的幾起案子侮攀,更是在濱河造成了極大的恐慌,老刑警劉巖厢拭,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兰英,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚪腐,警方通過查閱死者的電腦和手機箭昵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回季,“玉大人家制,你說我怎么就攤上這事正林。” “怎么了颤殴?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵觅廓,是天一觀的道長。 經(jīng)常有香客問我涵但,道長杈绸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任矮瘟,我火速辦了婚禮瞳脓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澈侠。我一直安慰自己劫侧,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布哨啃。 她就那樣靜靜地躺著烧栋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拳球。 梳的紋絲不亂的頭發(fā)上审姓,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音祝峻,去河邊找鬼魔吐。 笑死,一個胖子當著我的面吹牛莱找,可吹牛的內(nèi)容都是我干的画畅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宋距,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了症脂?” 一聲冷哼從身側(cè)響起谚赎,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诱篷,沒想到半個月后壶唤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡棕所,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年闸盔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琳省。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡迎吵,死狀恐怖躲撰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情击费,我是刑警寧澤拢蛋,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站蔫巩,受9級特大地震影響谆棱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜圆仔,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一垃瞧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坪郭,春花似錦个从、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绸罗,卻和暖如春意推,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背珊蟀。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工菊值, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人育灸。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓腻窒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磅崭。 傳聞我的和親對象是個殘疾皇子儿子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容