欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js API詳解之 readline模塊用法詳解

 更新時間:2020年05月22日 08:52:15   作者:李小強(qiáng)  
這篇文章主要介紹了Node.js API詳解之 readline模塊用法,結(jié)合實(shí)例形式詳細(xì)分析了Node.js API中readline模塊基本函數(shù)、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Node.js API詳解之 readline模塊用法。分享給大家供大家參考,具體如下:

Node.js API詳解之 readline

readline 模塊提供了一個接口,用于從可讀流(如 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) => {
 // 對答案進(jìn)行處理
 console.log(`多謝你的反饋:${answer}`);
 rl.close();
});

注意:當(dāng)調(diào)用該代碼時,Node.js 程序不會終止,直到 readline.Interface 被關(guān)閉,因?yàn)榻涌谠诘却?input 流中要被接收的數(shù)據(jù)。

readline.createInterface(options)

說明:

readline.createInterface() 方法會創(chuàng)建一個新的 readline.Interface 實(shí)例。
options:
input:要監(jiān)聽的可讀流。該選項(xiàng)是必需的。
output:要寫入逐行讀取數(shù)據(jù)的可寫流。
completer:一個可選的函數(shù),用于 Tab 自動補(bǔ)全。
terminal:如果 input 和 output 應(yīng)被當(dāng)作一個 TTY,且要寫入 ANSI/VT100 轉(zhuǎn)換的代碼,則設(shè)為 true。 默認(rèn)為實(shí)例化時在 output 流上檢查 isTTY。
historySize:保留的歷史行數(shù)的最大數(shù)量。 設(shè)為 0 可禁用歷史記錄。 該選項(xiàng)只有當(dāng) terminal 被用戶或內(nèi)部 output 設(shè)為 true 時才有意義,否則歷史緩存機(jī)制不會被初始化。 默認(rèn)為 30。
prompt:要使用的提示字符串。默認(rèn)為 ‘> ‘。
crlfDelay:如果 \r 與 \n 之間的延遲超過 crlfDelay 毫秒,則 \r 和 \n 都會被當(dāng)作換行分隔符。 默認(rèn)為 100 毫秒。
removeHistoryDuplicates:設(shè)置為true時,將從歷史列表中刪除較舊的值。默認(rèn)為 false。

demo:

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

Interface 類

說明:

readline.Interface 類的實(shí)例是使用 readline.createInterface() 方法構(gòu)造的。
每個實(shí)例都關(guān)聯(lián)一個 input 可讀流和一個 output 可寫流。
output 流用于為到達(dá)的用戶輸入打印提示,且從 input 流讀取。

line 事件

說明:

每當(dāng) input 流接收到行結(jié)束符(\n、\r 或 \r\n)時觸發(fā) ‘line' 事件。
通常發(fā)生在用戶按下 鍵或 鍵。
監(jiān)聽器函數(shù)被調(diào)用時會帶上一個包含接收的那一行輸入的字符串。

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(data[, key])

說明:

rl.write() 方法會把 data 或一個由 key 指定的按鍵序列寫入到 output。
data:輸出內(nèi)容
key:
ctrl: 如果為 true 則表示 ctrl 鍵。
meta: 如果為 true 則表示 Meta 鍵。
shift: 如果為 true 則表示 Shift 鍵。
name: 一個按鍵的名稱。
只有當(dāng) output 是一個 TTY 文本終端時,key 參數(shù)才被支持。
如果指定了 key,則 data 會被忽略。
當(dāng)被調(diào)用時,如果 input 流已被暫停,則 rl.write() 會恢復(fù) input 流。
如果 readline.Interface 被創(chuàng)建時 output 被設(shè)為 null 或 undefined,則 data 和 key 不會被寫入。

demo:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.write('請輸入姓名:');
rl.on('line', (input) => {
 //模擬 Ctrl+c 退出進(jìn)程。
 rl.write('', {ctrl: true, name: 'c'});
});

rl.question(query, callback)

說明:

rl.question() 方法通過寫入到 output 來展示 query,并等待用戶提供到 input 的輸入,
然后調(diào)用 callback 函數(shù)并傳入提供的輸入作為第一個參數(shù)。
query:一個在提示符之前、要寫入 output 的敘述或詢問。
callback:一個回調(diào)函數(shù),它會被調(diào)用并帶上用戶響應(yīng) query 的輸入。
當(dāng)被調(diào)用時,如果 input 流已被暫停,則 rl.question() 會恢復(fù) input 流。
如果 readline.Interface 被創(chuàng)建時 output 被設(shè)為 null 或 undefined,則 query 不會被寫入。

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()

說明:

rl.close() 方法會關(guān)閉 readline.Interface 實(shí)例,且撤回對 input 和 output 流的控制。
但被調(diào)用時,'close' 事件會被觸發(fā)。

demo:

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

close 事件

說明:

當(dāng)以下之一發(fā)生時,觸發(fā) ‘close' 事件:
rl.close() 方法被調(diào)用,且 readline.Interface 實(shí)例已撤回對 input 流和 output 流的控制;
input 流接收到 ‘end' 事件;
input 流接收到表示結(jié)束傳輸?shù)?ctrl-D;
input 流接收到表示 SIGINT 的 ctrl-C,且 readline.Interface 實(shí)例上沒有注冊 SIGINT 事件監(jiān)聽器。
監(jiān)聽器函數(shù)被調(diào)用時不傳入任何參數(shù)。
當(dāng) ‘close' 事件被觸發(fā)時,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();

SIGTSTP 事件

說明:

每當(dāng) input 流接收到一個 ctrl-Z 輸入(通常被稱為 SIGTSTP)時,觸發(fā) ‘SIGTSTP' 事件。
當(dāng) input 流接收到一個 SIGTSTP 時,如果沒有注冊 ‘SIGTSTP' 事件監(jiān)聽器,則 Node.js 進(jìn)程會被發(fā)送到后臺。
如果 input 流在進(jìn)程被發(fā)送到后臺之前被暫停,則 ‘pause' 和 SIGCONT 事件不會被觸發(fā)。
監(jiān)聽器函數(shù)被調(diào)用時不傳入任何參數(shù)。

demo:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.on('SIGTSTP', () => {
 console.log('退出請按Ctrl + c');
});

SIGINT 事件

說明:

每當(dāng) input 流接收到一個 ctrl-C 輸入(通常被稱為 SIGINT)時,觸發(fā) ‘SIGINT' 事件。
當(dāng) input 流接收到一個 SIGINT 時,如果沒有注冊 ‘SIGINT' 事件監(jiān)聽器,則 ‘pause' 事件會被觸發(fā)。
監(jiān)聽器函數(shù)被調(diào)用時不傳入任何參數(shù)。

demo:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.on('SIGINT', () => {
 console.log('已退出...');
 rl.close();
});

SIGCONT 事件

說明:

當(dāng)一個 Node.js 進(jìn)程使用 ctrl-Z(也就是 SIGTSTP)移入后臺之后再使用 fg [ job_id ] 移回前臺時,觸發(fā) ‘SIGCONT' 事件。
如果 input 流在 SIGTSTP 請求之前被暫停,則事件不會被觸發(fā)。
監(jiān)聽器函數(shù)被調(diào)用時不傳入任何參數(shù)。

demo:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.on('SIGCONT', () => {
 console.log('已喚起...');
});

rl.prompt([preserveCursor])

說明:

rl.prompt() 方法會在 output 流中新的一行寫入 readline.Interface 實(shí)例配置后的 prompt,
用于為用戶提供一個可供輸入的新的位置。
preserveCursor:如果為 true,則阻止光標(biāo)落點(diǎn)被設(shè)為 0。
當(dāng)被調(diào)用時,如果 input 流已被暫停,則 rl.prompt() 會恢復(fù) input 流。
如果 readline.Interface 被創(chuàng)建時 output 被設(shè)為 null 或 undefined,則提示不會被寫入。

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(prompt)

說明:

rl.setPrompt() 方法用于設(shè)置每當(dāng) rl.prompt() 被調(diào)用時要被寫入到 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()

說明:

rl.pause() 方法會暫停 input 流,且稍后需要時可被恢復(fù)。
調(diào)用 rl.pause() 不會立刻暫停其他事件(包括 ‘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();
});

pause 事件

說明:

當(dāng)以下之一發(fā)生時觸發(fā) ‘pause' 事件:
input 流被暫停。
input 流不是暫停的,且接收到 SIGCONT 事件。
監(jiān)聽器函數(shù)被調(diào)用時不傳入任何參數(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();
});

rl.resume()

說明:

如果 input 流已被暫停,則 rl.resume() 方法會恢復(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);
});

resume 事件

說明:

每當(dāng) input 流被恢復(fù)時觸發(fā) ‘resume' 事件。
監(jiān)聽器函數(shù)被調(diào)用時不傳入任何參數(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(stream, x, y)

說明:

readline.cursorTo() 方法會移動光標(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(stream, dx, dy)

說明:

readline.moveCursor() 方法會移動光標(biāo)到給定的 TTY stream 中相對當(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
//      我在這?。。?

readline.clearScreenDown(stream)

說明:

eadline.clearScreenDown() 方法會從光標(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(stream, dir)

說明:

readline.clearLine() 方法會以 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[, interface])

說明:

readline.emitKeypressEvents() 方法使給定的可讀流 stream 相應(yīng)于接收到的輸入觸發(fā) ‘keypress' 事件。
可選的 interface 指定了一個 readline.Interface 實(shí)例,用于當(dāng)自動補(bǔ)全被禁用時檢測到復(fù)制粘貼輸入。
如果 stream 是一個 TTY,則它必須為原始模式。

demo:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.write('我在這?。。?);
readline.emitKeypressEvents(process.stdin);

例子一:旋轉(zhuǎn)進(jìn)度

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: '請輸入> '
});
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);
});
// 請輸入> 1
// 你輸入的是:'1'
// 請輸入> hello
// world!
// 請輸入> 再見!

例子三:逐行地讀取文件流

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

希望本文所述對大家node.js程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解

    nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解

    這篇文章主要為大家介紹了nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Nodejs新特性async和await的使用詳解

    Nodejs新特性async和await的使用詳解

    這篇文章主要介紹了Nodejs新特性async和await的使用,主要包括Es6常見語法的使用及Async、Await和Promise的示例代碼,需要的朋友可以參考下
    2022-09-09
  • koa2 數(shù)據(jù)api中間件設(shè)計(jì)模型的實(shí)現(xiàn)方法

    koa2 數(shù)據(jù)api中間件設(shè)計(jì)模型的實(shí)現(xiàn)方法

    這篇文章主要介紹了koa2 數(shù)據(jù)api中間件設(shè)計(jì)模型的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解Node.js開發(fā)中的express-session

    詳解Node.js開發(fā)中的express-session

    express-session?是基于express框?qū)iT用于處理session的中間件,本篇文章主要介紹了詳解Node.js開發(fā)中的express-session,有興趣的可以了解一下<BR>
    2017-05-05
  • nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息

    nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息

    這篇文章主要介紹了nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 利用Decorator如何控制Koa路由詳解

    利用Decorator如何控制Koa路由詳解

    最近學(xué)習(xí)了plover的底層框架koa,所以下面這篇文章主要給大家介紹了關(guān)于利用Decorator如何控制Koa路由的相關(guān)資料,,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來隨著小編一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • 如何使用Node.js爬取任意網(wǎng)頁資源并輸出PDF文件到本地

    如何使用Node.js爬取任意網(wǎng)頁資源并輸出PDF文件到本地

    這篇文章主要介紹了使用Node.js爬取任意網(wǎng)頁資源并輸出高質(zhì)量PDF文件到本地,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面小編就來和大家一起學(xué)習(xí)吧
    2019-06-06
  • 在node環(huán)境下parse Smarty模板的使用示例代碼

    在node環(huán)境下parse Smarty模板的使用示例代碼

    這篇文章主要介紹了在node環(huán)境下parse Smarty模板的使用示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 使用nvm和nrm優(yōu)化node.js工作流的方法

    使用nvm和nrm優(yōu)化node.js工作流的方法

    這篇文章主要介紹了使用nvm和nrm優(yōu)化node.js工作流的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 解析NodeJs的調(diào)試方法

    解析NodeJs的調(diào)試方法

    本文主要介紹了NodeJs調(diào)試的步驟,以及實(shí)例方法,具有一定的參考作用,需要的朋友可以看下
    2016-12-12

最新評論