小編這次要給大家分享的是Node.js API中如何使用readline模塊,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、龍圩網(wǎng)站維護(hù)、網(wǎng)站推廣。
Node.js API詳解之 readline
readline 模塊提供了一個(gè)接口,用于從可讀流(如 process.stdin)讀取數(shù)據(jù),每次讀取一行。
它可以通過以下方式使用:
const readline = require('readline');
readline 模塊的基本用法:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('你認(rèn)為 Node.js 中文網(wǎng)怎么樣?', (answer) => { // 對(duì)答案進(jìn)行處理 console.log(`多謝你的反饋:${answer}`); rl.close(); });
注意:當(dāng)調(diào)用該代碼時(shí),Node.js 程序不會(huì)終止,直到 readline.Interface 被關(guān)閉,因?yàn)榻涌谠诘却?input 流中要被接收的數(shù)據(jù)。
說明:
readline.createInterface() 方法會(huì)創(chuàng)建一個(gè)新的 readline.Interface 實(shí)例。
options:
input:要監(jiān)聽的可讀流。該選項(xiàng)是必需的。
output:要寫入逐行讀取數(shù)據(jù)的可寫流。
completer:一個(gè)可選的函數(shù),用于 Tab 自動(dòng)補(bǔ)全。
terminal:如果 input 和 output 應(yīng)被當(dāng)作一個(gè) TTY,且要寫入 ANSI/VT100 轉(zhuǎn)換的代碼,則設(shè)為 true。 默認(rèn)為實(shí)例化時(shí)在 output 流上檢查 isTTY。
historySize:保留的歷史行數(shù)的最大數(shù)量。 設(shè)為 0 可禁用歷史記錄。 該選項(xiàng)只有當(dāng) terminal 被用戶或內(nèi)部 output 設(shè)為 true 時(shí)才有意義,否則歷史緩存機(jī)制不會(huì)被初始化。 默認(rèn)為 30。
prompt:要使用的提示字符串。默認(rèn)為 ‘> ‘。
crlfDelay:如果 \r 與 \n 之間的延遲超過 crlfDelay 毫秒,則 \r 和 \n 都會(huì)被當(dāng)作換行分隔符。 默認(rèn)為 100 毫秒。
removeHistoryDuplicates:設(shè)置為true時(shí),將從歷史列表中刪除較舊的值。默認(rèn)為 false。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
說明:
readline.Interface 類的實(shí)例是使用 readline.createInterface() 方法構(gòu)造的。
每個(gè)實(shí)例都關(guān)聯(lián)一個(gè) input 可讀流和一個(gè) output 可寫流。
output 流用于為到達(dá)的用戶輸入打印提示,且從 input 流讀取。
說明:
每當(dāng) input 流接收到行結(jié)束符(\n、\r 或 \r\n)時(shí)觸發(fā) ‘line' 事件。
通常發(fā)生在用戶按下 鍵或 鍵。
監(jiān)聽器函數(shù)被調(diào)用時(shí)會(huì)帶上一個(gè)包含接收的那一行輸入的字符串。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', (line) => { console.log(`接收到:${line}`); }); // 1 // 接收到:1 // 2 // 接收到:2 // 3 // 接收到:3
說明:
rl.write() 方法會(huì)把 data 或一個(gè)由 key 指定的按鍵序列寫入到 output。
data:輸出內(nèi)容
key:
ctrl: 如果為 true 則表示 ctrl 鍵。
meta: 如果為 true 則表示 Meta 鍵。
shift: 如果為 true 則表示 Shift 鍵。
name: 一個(gè)按鍵的名稱。
只有當(dāng) output 是一個(gè) TTY 文本終端時(shí),key 參數(shù)才被支持。
如果指定了 key,則 data 會(huì)被忽略。
當(dāng)被調(diào)用時(shí),如果 input 流已被暫停,則 rl.write() 會(huì)恢復(fù) input 流。
如果 readline.Interface 被創(chuàng)建時(shí) output 被設(shè)為 null 或 undefined,則 data 和 key 不會(huì)被寫入。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('請(qǐng)輸入姓名:'); rl.on('line', (input) => { //模擬 Ctrl+c 退出進(jìn)程。 rl.write('', {ctrl: true, name: 'c'}); });
說明:
rl.question() 方法通過寫入到 output 來展示 query,并等待用戶提供到 input 的輸入,
然后調(diào)用 callback 函數(shù)并傳入提供的輸入作為第一個(gè)參數(shù)。
query:一個(gè)在提示符之前、要寫入 output 的敘述或詢問。
callback:一個(gè)回調(diào)函數(shù),它會(huì)被調(diào)用并帶上用戶響應(yīng) query 的輸入。
當(dāng)被調(diào)用時(shí),如果 input 流已被暫停,則 rl.question() 會(huì)恢復(fù) input 流。
如果 readline.Interface 被創(chuàng)建時(shí) output 被設(shè)為 null 或 undefined,則 query 不會(huì)被寫入。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('你是誰?', (answer) => { console.log('你好%s',answer); }); // 你是誰?xiaoqiang // 你好xiaoqiang
說明:
rl.close() 方法會(huì)關(guān)閉 readline.Interface 實(shí)例,且撤回對(duì) input 和 output 流的控制。
但被調(diào)用時(shí),'close' 事件會(huì)被觸發(fā)。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.close();
說明:
當(dāng)以下之一發(fā)生時(shí),觸發(fā) ‘close' 事件:
rl.close() 方法被調(diào)用,且 readline.Interface 實(shí)例已撤回對(duì) input 流和 output 流的控制;
input 流接收到 ‘end' 事件;
input 流接收到表示結(jié)束傳輸?shù)?ctrl-D;
input 流接收到表示 SIGINT 的 ctrl-C,且 readline.Interface 實(shí)例上沒有注冊(cè) SIGINT 事件監(jiān)聽器。
監(jiān)聽器函數(shù)被調(diào)用時(shí)不傳入任何參數(shù)。
當(dāng) ‘close' 事件被觸發(fā)時(shí),readline.Interface 實(shí)例應(yīng)當(dāng)被視為已結(jié)束。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('close', () => { console.log('已退出......') }); rl.close();
說明:
每當(dāng) input 流接收到一個(gè) ctrl-Z 輸入(通常被稱為 SIGTSTP)時(shí),觸發(fā) ‘SIGTSTP' 事件。
當(dāng) input 流接收到一個(gè) SIGTSTP 時(shí),如果沒有注冊(cè) ‘SIGTSTP' 事件監(jiān)聽器,則 Node.js 進(jìn)程會(huì)被發(fā)送到后臺(tái)。
如果 input 流在進(jìn)程被發(fā)送到后臺(tái)之前被暫停,則 ‘pause' 和 SIGCONT 事件不會(huì)被觸發(fā)。
監(jiān)聽器函數(shù)被調(diào)用時(shí)不傳入任何參數(shù)。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('SIGTSTP', () => { console.log('退出請(qǐng)按Ctrl + c'); });
說明:
每當(dāng) input 流接收到一個(gè) ctrl-C 輸入(通常被稱為 SIGINT)時(shí),觸發(fā) ‘SIGINT' 事件。
當(dāng) input 流接收到一個(gè) SIGINT 時(shí),如果沒有注冊(cè) ‘SIGINT' 事件監(jiān)聽器,則 ‘pause' 事件會(huì)被觸發(fā)。
監(jiān)聽器函數(shù)被調(diào)用時(shí)不傳入任何參數(shù)。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('SIGINT', () => { console.log('已退出...'); rl.close(); });
說明:
當(dāng)一個(gè) Node.js 進(jìn)程使用 ctrl-Z(也就是 SIGTSTP)移入后臺(tái)之后再使用 fg [ job_id ] 移回前臺(tái)時(shí),觸發(fā) ‘SIGCONT' 事件。
如果 input 流在 SIGTSTP 請(qǐng)求之前被暫停,則事件不會(huì)被觸發(fā)。
監(jiān)聽器函數(shù)被調(diào)用時(shí)不傳入任何參數(shù)。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('SIGCONT', () => { console.log('已喚起...'); });
說明:
rl.prompt() 方法會(huì)在 output 流中新的一行寫入 readline.Interface 實(shí)例配置后的 prompt,
用于為用戶提供一個(gè)可供輸入的新的位置。
preserveCursor:如果為 true,則阻止光標(biāo)落點(diǎn)被設(shè)為 0。
當(dāng)被調(diào)用時(shí),如果 input 流已被暫停,則 rl.prompt() 會(huì)恢復(fù) input 流。
如果 readline.Interface 被創(chuàng)建時(shí) output 被設(shè)為 null 或 undefined,則提示不會(huì)被寫入。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('你是誰?', (answer) => { console.log('你好%s',answer); rl.prompt(); });
說明:
rl.setPrompt() 方法用于設(shè)置每當(dāng) rl.prompt() 被調(diào)用時(shí)要被寫入到 output 的提示。
prompt:提示內(nèi)容
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.setPrompt('用戶輸入:'); rl.on('line', (input) => { console.log(input); rl.prompt(); });
說明:
rl.pause() 方法會(huì)暫停 input 流,且稍后需要時(shí)可被恢復(fù)。
調(diào)用 rl.pause() 不會(huì)立刻暫停其他事件(包括 ‘line')被 readline.Interface 實(shí)例觸發(fā)。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', (input) => { console.log(input); rl.pause(); });
說明:
當(dāng)以下之一發(fā)生時(shí)觸發(fā) ‘pause' 事件:
input 流被暫停。
input 流不是暫停的,且接收到 SIGCONT 事件。
監(jiān)聽器函數(shù)被調(diào)用時(shí)不傳入任何參數(shù)。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('pause', () => { console.log('Readline 被暫停。'); }); rl.on('line', (input) => { console.log(input); rl.pause(); });
說明:
如果 input 流已被暫停,則 rl.resume() 方法會(huì)恢復(fù) input 流。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', (input) => { console.log(input); rl.pause(); setTimeout( () => { rl.resume(); },1000); });
說明:
每當(dāng) input 流被恢復(fù)時(shí)觸發(fā) ‘resume' 事件。
監(jiān)聽器函數(shù)被調(diào)用時(shí)不傳入任何參數(shù)
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('resume', () => { console.log('Readline 被恢復(fù)。'); }); rl.on('line', (input) => { console.log(input); rl.pause(); setTimeout( () => { rl.resume(); },1000); });
說明:
readline.cursorTo() 方法會(huì)移動(dòng)光標(biāo)到給定的 TTY stream 中指定的位置。
demo:
const readline = require('readline'); readline.cursorTo(process.stdout, 10, 2); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('我在這?。?!');
說明:
readline.moveCursor() 方法會(huì)移動(dòng)光標(biāo)到給定的 TTY stream 中相對(duì)當(dāng)前的位置。
demo:
const readline = require('readline'); readline.moveCursor(process.stdout, 10, 2); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('我在這?。?!'); // lixiaoqiangdeMacBook-Pro:NodeApi xiaoqiang$ node app.js // 我在這?。?!
說明:
eadline.clearScreenDown() 方法會(huì)從光標(biāo)的當(dāng)前位置向下清除給定的 TTY 流。
demo:
const readline = require('readline'); readline.clearScreenDown(process.stdout); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('我在這?。?!');
說明:
readline.clearLine() 方法會(huì)以 dir 指定的方向清除給定的 TTY 流的當(dāng)前行。
dir:
-1 – 光標(biāo)左邊
1 – 光標(biāo)右邊
0 – 整行
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('我在這?。?!'); readline.clearLine(process.stdout, -1);
說明:
readline.emitKeypressEvents() 方法使給定的可讀流 stream 相應(yīng)于接收到的輸入觸發(fā) ‘keypress' 事件。
可選的 interface 指定了一個(gè) readline.Interface 實(shí)例,用于當(dāng)自動(dòng)補(bǔ)全被禁用時(shí)檢測(cè)到復(fù)制粘貼輸入。
如果 stream 是一個(gè) TTY,則它必須為原始模式。
demo:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('我在這?。?!'); readline.emitKeypressEvents(process.stdin);
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const imgArr = ['/', '-', '\\']; let index = 0; setInterval(() => { readline.clearLine(process.stdout, -1); readline.moveCursor(process.stdout, -1, 0); rl.write(imgArr[index]); if(index === 2){ index=0; }else{ index++; } }, 200);
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: '請(qǐng)輸入> ' }); rl.prompt(); rl.on('line', (line) => { switch (line.trim()) { case 'hello': console.log('world!'); break; default: console.log(`你輸入的是:'${line.trim()}'`); break; } rl.prompt(); }).on('close', () => { console.log('再見!'); process.exit(0); }); // 請(qǐng)輸入> 1 // 你輸入的是:'1' // 請(qǐng)輸入> hello // world! // 請(qǐng)輸入> 再見!
const readline = require('readline'); const fs = require('fs'); const rl = readline.createInterface({ input: fs.createReadStream('stdout.log'), crlfDelay: Infinity }); rl.on('line', (line) => { console.log(`文件的單行內(nèi)容:${line}`); }); // 文件的單行內(nèi)容:1 // 文件的單行內(nèi)容:2 // 文件的單行內(nèi)容:3 // 文件的單行內(nèi)容:4 // 文件的單行內(nèi)容:5 // 文件的單行內(nèi)容:6 // 文件的單行內(nèi)容:7 // 文件的單行內(nèi)容:8 // 文件的單行內(nèi)容:9 // 文件的單行內(nèi)容:0
看完這篇關(guān)于Node.js API中如何使用readline模塊的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。
文章題目:Node.jsAPI中如何使用readline模塊
當(dāng)前URL:http://jinyejixie.com/article2/pshpic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、Google、手機(jī)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、ChatGPT、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)