Node.js中readline模塊實(shí)現(xiàn)終端輸入
1 概述
readline是Node.js里實(shí)現(xiàn)標(biāo)準(zhǔn)輸入輸出的封裝好的模塊,通過(guò)這個(gè)模塊我們可以以逐行的方式讀取數(shù)據(jù)流。使用require("readline")
可以引用模塊。
使用readline步驟:
1、引入:require('readline')
2、創(chuàng)建readline對(duì)象(接口)
3、調(diào)用接口的相關(guān)方法
4、監(jiān)聽(tīng)和處理readline事件
示例代碼:
// 引入readline模塊 const readline = require("readline"); // 創(chuàng)建readline接口實(shí)例 let r1 = readline.createInterface({ input: process.stdin, output: process.stdout }) //調(diào)用接口方法 r1.question("你叫什么名字\t", function (answer) { console.log("我的名字是:", answer); // 不加close,則不會(huì)結(jié)束 r1.close(); }) //close事件監(jiān)聽(tīng) r1.on("close", function () { // 結(jié)束程序 process.exit(0); })
2 readline的使用
第一步:createInterface創(chuàng)建了一個(gè)接口實(shí)例
第二步:調(diào)用相關(guān)方法,如question方法輸入
第三步:監(jiān)聽(tīng)readline的close事件
注意:
1、在createInterface里,需要傳入標(biāo)準(zhǔn)輸入輸出作為數(shù)據(jù)的輸入輸出流
2、在question方法的回調(diào)函數(shù)里,可以獲取到用戶的輸入并進(jìn)行處理,同時(shí)進(jìn)行了close操作來(lái)結(jié)束程序,否則程序不會(huì)結(jié)束
3、在close事件的監(jiān)聽(tīng)里,執(zhí)行了process.exit(0)來(lái)使程序退出的操作,因?yàn)閞eadline模塊只要一開(kāi)始獲取用戶輸入就不會(huì)結(jié)束,必須使用這種直接的方式來(lái)結(jié)束程序
3 示例1:輸入輸出
示例代碼:
// 引入readline模塊 let readline = require("readline"); // 創(chuàng)建接口實(shí)例 let r1 = readline.createInterface({ input: process.stdin, output: process.stdout }) // 調(diào)用接口方法 r1.on("line", function (line) { switch (line.trim()) { case "copy": console.log("復(fù)制"); break; case "hello": r1.write("Hello "); console.log("World!"); break; case "close": r1.close(); break; default: console.log("沒(méi)有找到命令!"); break; } }) // close事件監(jiān)聽(tīng) r1.on("close", function () { console.log("再見(jiàn)"); process.exit(0); })
注意:'line’事件,這個(gè)事件就是在用戶輸完一行,按下回車(chē)后就會(huì)觸發(fā)的事件,它會(huì)將用戶輸入的數(shù)據(jù)通過(guò)回調(diào)函數(shù)傳回來(lái),可在此方法里處理用戶輸入的數(shù)據(jù)
4 示例2:模擬命令行的輸入輸出
示例代碼:
// 引入readline模塊 let readline = require("readline"); // 創(chuàng)建接口實(shí)例 let r1 = readline.createInterface({ input: process.stdin, output: process.stdout }) // 方法方法setPromat(promat) ,就是給每一行設(shè)置一個(gè)提示符, // 就好比window命令行的> ,這里設(shè)置的是Test> r1.setPrompt("Test> "); // prompt()是最重要的方法,因?yàn)樗w現(xiàn)了readline的核心作用, // 以行為單位讀取數(shù)據(jù),prompt方法就是在等待用戶輸入數(shù)據(jù) r1.prompt(); // 調(diào)用接口方法 // 監(jiān)聽(tīng)了'line' 事件,因?yàn)閜rompt方法調(diào)用一次就只會(huì)讀取一次數(shù)據(jù) // 所以,在這個(gè)方法又調(diào)用了一次prompt方法,這樣就可以繼續(xù)讀取用戶輸入 // 從而達(dá)到一種命令行的效果 r1.on("line", function (line) { switch (line.trim()) { case "copy": console.log("復(fù)制"); break; case "hello": console.log("World!"); break; case "close": r1.close(); break; default: console.log("沒(méi)有找到命令!"); break; } r1.prompt(); }); // close事件監(jiān)聽(tīng) r1.on("close", function () { console.log("再見(jiàn)"); process.exit(0); })
說(shuō)明:
1、方法setPromat(promat) ,就是給每一行設(shè)置一個(gè)提示符,就好比window命令行的> ,這里設(shè)置的是Test>
2、prompt()是最重要的方法,因?yàn)樗w現(xiàn)了readline的核心作用,以行為單位讀取數(shù)據(jù),prompt方法就是在等待用戶輸入數(shù)據(jù)
3、監(jiān)聽(tīng)了’line’ 事件,因?yàn)閜rompt方法調(diào)用一次就只會(huì)讀取一次數(shù)據(jù),所以,在這個(gè)方法又調(diào)用了一次prompt方法,這樣就可以繼續(xù)讀取用戶輸入,從而達(dá)到一種命令行的效果
到此這篇關(guān)于Node.js中readline模塊實(shí)現(xiàn)終端輸入的文章就介紹到這了,更多相關(guān)Node.js 終端輸入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node.js使用redis儲(chǔ)存session的方法
這篇文章主要介紹了node.js使用redis儲(chǔ)存session的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Nodejs極簡(jiǎn)入門(mén)教程(一):模塊機(jī)制
這篇文章主要介紹了Nodejs極簡(jiǎn)入門(mén)教程(一):模塊機(jī)制,本文講解了模塊基礎(chǔ)知識(shí)、模塊的加載、包等內(nèi)容,需要的朋友可以參考下2014-10-10npm安裝報(bào)錯(cuò)npm ERR! Error: EPERM: operation&
這篇文章主要為大家介紹了npm安裝報(bào)錯(cuò)npm ERR! Error: EPERM: operation not permitted解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07node.js中的events.emitter.removeAllListeners方法使用說(shuō)明
這篇文章主要介紹了node.js中的events.emitter.removeAllListeners方法使用說(shuō)明,本文介紹了events.emitter.removeAllListeners 的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12