作者:mobiledu2502854827 | 来源:互联网 | 2023-09-02 10:43
什麼是readlinereadline許可從可讀流中以逐行的體式格局讀取數據,比方process.stdin等。在node.js敕令行形式下默許引入了readline模塊,但假如是
什麼是readline
readline許可從可讀流中以逐行的體式格局讀取數據,比方process.stdin等。
在node.js敕令行形式下默許引入了readline模塊,但假如是運用node.js運轉劇本的話,則須要本身經過過程require(‘readline’)體式格局手動引入該模塊。
怎樣運用readline
建立實例
起首、建立一個接口實例,供應一個Object範例的參數。參數以下:
input: 監聽的可讀流(必須)
output: 寫入readline的可寫流(必須)
completer: 用於 Tab 自動補全的可選函數(不經常使用)
terminal: 假如願望 input 和 output 流像 TTY 一樣看待,那末通報參數 true ,而且經過 ANSI/VT100 轉碼。 默許狀況下搜檢 isTTY 是不是在 output 流上實例化。(不經常使用)
historySize: 保存行汗青紀錄最大值,為了禁用該值被設置為0,默許為30,只要在terminal被設置為true或經過過程一個內部輸出搜檢時,這個選項才有作用,不然汗青緩存機制不會初始化。(不經常使用)
第一種體式格局:只傳入兩個必傳參數
const readLine = require('readline');
let rl = readLine.createInterface(process.stdin, process.stdout);
第二種體式格局:能夠傳入其他非必須參數
const readLine = require('readline');
let rl = readLine.createInterface({
input: process.stdin,
output: process.stdout,
// 其他參數省略
})
實例
const readLine = require('readline');
let rl = readLine.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '> 請輸入'
})
// 挪用
rl.prompt(); // 掌握台結果顯現:>請輸入
注重:一旦該代碼被挪用,Node.js順序將不會停止曉得readline接口被封閉,由於接口會在輸入流中不斷的守候數據。
要領
以下一切的實例均根據以下rl所建立:
const readLine = require('readline');
let rl = readLine.createInterface({
input: process.stdin,
output: process.stdout
})
1、rl.setPrompt([prompt])
設置提醒符,當你運用node運轉該文件,而且挪用rl.prompt()時,會在終端看到你設置的提醒prompt,即“> 請輸入”
rl.setPrompt('> 請輸入')
注重:該要領和上面的實例參數設置是一樣的結果
2、rl.prompt([preserveCursor])
為用戶輸入準備好readline,將現有的setPrompt選項放到新的一行,讓用戶有一個新的處所最先輸入。將preserveCursor設為true來防備光標位置被從新設定成0。
如須要換行輸入,即在新的一行,輸入信息,可在prompt中到場n。
rl.prompt(); // 掌握台結果顯現:>請輸入
3、rl.write(data[, key])
當運用readline.createInterface()建立實例時,,假如輸入流為null或許undefined,則寫入數據到輸出流。
key是一個示意鍵序列的字面量對象,假如終端是TTY,則可用。
rl.write('Delete me!');
// Simulate ctrl+u to delete the line written previously
rl.write(null, {ctrl: true, name: 'u'});
4、rl.question(query, callback)
預先制訂提醒內容query,將會在用戶輸入被應對后,觸發實行指定的回掉函數callback。
rl.question('你本年多大了?\n', function(prompt) {
console.log('這是你輸入的回覆結果:' + prompt);
rl.close();
})
5、rl.pause()
停息readline的輸入流,能夠恢復,rl.resume()、rl.write()、rl.question()和rl.prompt()均能夠恢復該輸入流。
挪用該要領會觸發pause事宜。
6、rl.resume()
恢復readline的輸入流。
挪用該要領會觸發resume事宜。
7、rl.close()
封閉readline建立的實例,不掌握輸入輸出流。
挪用該要領會觸發close事宜。
事宜
1、line事宜
不管什麼時候,在輸入流接收了一個行完畢符(n, r, 或許 rn)時觸發,即在用戶輸入后,按了回車或許返回鍵時觸發該事宜。能夠用來監聽用戶輸入。
rl.on('line', function (line) {
console.log('這是用戶輸入的內容:' + line);
})
2、pause事宜
輸入流被停息時觸發,即挪用了rl.pause(),或許沒有停息輸入流,在收到 SIGCONT/SIGINT,且readline.Interfacce實例上並沒有註冊SIGCONT/SIGINT監聽器時,也會被觸發,而且假如輸入流在收到SIGTSIP之前就已被停息了,那末該事宜也不會觸發。
rl.on('pause', function() {
console.log('停息輸入流...')
})
3、resume事宜
輸入流從新啟動時被觸發,即挪用了rl.resume()、或許rl.write()、rl.question()和rl.prompt()。
rl.on('resume', function() {
console.log('恢復輸入流...')
})
4、close事宜
挪用rl.close()要領時會觸發該事宜,或許輸入流接收到“完畢”事宜。以下的恣意一種狀況都邑觸發close事宜。
一旦close事宜被觸發,則以為readline.Interaface實例已停止。
1)、rl.close()要領被挪用后,readline.Interaface實例便會摒棄輸入輸出流的掌握權。
2)、輸入流接收到本身的“end”事宜。
3)、輸入流接收到-C,發送SIGINT信號,而且在readline.Interfacce實例上並沒有註冊SIGINT事宜的監聽器。
4)、輸入流接收到-D,發送傳輸完畢信號(EOF,end-of-transmission);
5)、EOT:定界符,即輸入單個或多個“>”,並按下回車時。
rl.on('close', function() {
console.log('封閉輸入流...');
process.exit(0); // 退出當前歷程
})
5、SIGCOUT(該事宜在window體繫上不起作用)
當運用-Z將Node.js歷程移動到背景時,SIGCONT事宜將會被觸發。然後能夠運用 fg(1) 敕令將它移動到前台。
假如輸入流在收到SIGTSIP之前就已被停息了,那末該事宜就不會觸發。
6、SIGINT
當輸入流收到-C敕令時,我們熟知的SIGINT事宜就會被觸發。假如當時並沒有註冊任何SIGINT事宜監聽器,那末當輸入流接收到SIGINT信號時,’pause’事宜和’close’事宜均會被觸發。
7、SIGTSTP(該事宜在window體繫上不起作用)
當輸入流收到-Z敕令時,我們熟知的SIGTSTP事宜就會被觸發。假如沒有註冊SIGTSTP事宜監聽器,那末當輸入流收到SIGTSTP事宜時,Node.js歷程就將會被移動到背景。
假如輸入在歷程被發送到背景之前就已被停息了,那末’pause’和’SIGCONT’事宜就將不會被觸發。
拜見官方文檔
參考案例看笑話