中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js API中如何使用readline模塊

發布時間:2020-07-22 16:44:20 來源:億速云 閱讀:188 作者:小豬 欄目:web開發

小編這次要給大家分享的是Node.js API中如何使用readline模塊,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

Node.js API詳解之 readline

readline 模塊提供了一個接口,用于從可讀流(如 process.stdin)讀取數據,每次讀取一行。
它可以通過以下方式使用:

const readline = require('readline');

readline 模塊的基本用法:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.question('你認為 Node.js 中文網怎么樣?', (answer) => {
 // 對答案進行處理
 console.log(`多謝你的反饋:${answer}`);
 rl.close();
});

注意:當調用該代碼時,Node.js 程序不會終止,直到 readline.Interface 被關閉,因為接口在等待 input 流中要被接收的數據。

readline.createInterface(options)

說明:

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

demo:

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

Interface 類

說明:

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

line 事件

說明:

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

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:輸出內容
key:
ctrl: 如果為 true 則表示 ctrl 鍵。
meta: 如果為 true 則表示 Meta 鍵。
shift: 如果為 true 則表示 Shift 鍵。
name: 一個按鍵的名稱。
只有當 output 是一個 TTY 文本終端時,key 參數才被支持。
如果指定了 key,則 data 會被忽略。
當被調用時,如果 input 流已被暫停,則 rl.write() 會恢復 input 流。
如果 readline.Interface 被創建時 output 被設為 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 退出進程。
 rl.write('', {ctrl: true, name: 'c'});
});

rl.question(query, callback)

說明:

rl.question() 方法通過寫入到 output 來展示 query,并等待用戶提供到 input 的輸入,
然后調用 callback 函數并傳入提供的輸入作為第一個參數。
query:一個在提示符之前、要寫入 output 的敘述或詢問。
callback:一個回調函數,它會被調用并帶上用戶響應 query 的輸入。
當被調用時,如果 input 流已被暫停,則 rl.question() 會恢復 input 流。
如果 readline.Interface 被創建時 output 被設為 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() 方法會關閉 readline.Interface 實例,且撤回對 input 和 output 流的控制。
但被調用時,'close' 事件會被觸發。

demo:

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

close 事件

說明:

當以下之一發生時,觸發 ‘close' 事件:
rl.close() 方法被調用,且 readline.Interface 實例已撤回對 input 流和 output 流的控制;
input 流接收到 ‘end' 事件;
input 流接收到表示結束傳輸的 ctrl-D;
input 流接收到表示 SIGINT 的 ctrl-C,且 readline.Interface 實例上沒有注冊 SIGINT 事件監聽器。
監聽器函數被調用時不傳入任何參數。
當 ‘close' 事件被觸發時,readline.Interface 實例應當被視為已結束。

demo:

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

SIGTSTP 事件

說明:

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

demo:

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

SIGINT 事件

說明:

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

demo:

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

SIGCONT 事件

說明:

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

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 實例配置后的 prompt,
用于為用戶提供一個可供輸入的新的位置。
preserveCursor:如果為 true,則阻止光標落點被設為 0。
當被調用時,如果 input 流已被暫停,則 rl.prompt() 會恢復 input 流。
如果 readline.Interface 被創建時 output 被設為 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() 方法用于設置每當 rl.prompt() 被調用時要被寫入到 output 的提示。
prompt:提示內容

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 流,且稍后需要時可被恢復。
調用 rl.pause() 不會立刻暫停其他事件(包括 ‘line')被 readline.Interface 實例觸發。

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 事件

說明:

當以下之一發生時觸發 ‘pause' 事件:
input 流被暫停。
input 流不是暫停的,且接收到 SIGCONT 事件。
監聽器函數被調用時不傳入任何參數。

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() 方法會恢復 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 事件

說明:

每當 input 流被恢復時觸發 ‘resume' 事件。
監聽器函數被調用時不傳入任何參數

demo:

const readline = require('readline');
const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});
rl.on('resume', () => {
 console.log('Readline 被恢復。');
});
rl.on('line', (input) => {
 console.log(input);
 rl.pause();
 setTimeout( () => {
  rl.resume();
 },1000);
});

readline.cursorTo(stream, x, y)

說明:

readline.cursorTo() 方法會移動光標到給定的 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() 方法會移動光標到給定的 TTY stream 中相對當前的位置。

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() 方法會從光標的當前位置向下清除給定的 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 流的當前行。
dir:
-1 – 光標左邊
1 – 光標右邊
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 相應于接收到的輸入觸發 ‘keypress' 事件。
可選的 interface 指定了一個 readline.Interface 實例,用于當自動補全被禁用時檢測到復制粘貼輸入。
如果 stream 是一個 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: '請輸入> '
});
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(`文件的單行內容:${line}`);
});
// 文件的單行內容:1
// 文件的單行內容:2
// 文件的單行內容:3
// 文件的單行內容:4
// 文件的單行內容:5
// 文件的單行內容:6
// 文件的單行內容:7
// 文件的單行內容:8
// 文件的單行內容:9
// 文件的單行內容:0

看完這篇關于Node.js API中如何使用readline模塊的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新田县| 璧山县| 岚皋县| 将乐县| 三亚市| 白山市| 苍南县| 临夏县| 福建省| 民和| 易门县| 凌云县| 攀枝花市| 衡东县| 溧阳市| 台南县| 文水县| 阳谷县| 内江市| 甘谷县| 宜丰县| 营山县| 黎平县| 洛浦县| 华池县| 奎屯市| 武隆县| 沭阳县| 南陵县| 昌黎县| 彩票| 长顺县| 孝感市| 五河县| 泊头市| 大同县| 喜德县| 西丰县| 资中县| 无极县| 奉新县|