readline 模块提供了一种读取数据流的方法,一次一行。

它有两种 API:

// 基于 promise 的 API
const readline = require('readline/promises')
// 回调和同步的 API
const readline = require('readline')

以下示例是 readline 模块的基本用法:

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

const rl = readline.createInterface({ input, output })

rl.question('你觉得 Node.js 怎么样?', (answer) => {
  console.log(`感谢您的宝贵反馈: ${answer}`)

  rl.close()
})

步骤如下:

  • 使用 readlinecreateInterface 方法创建了一个接口实例
  • 调用实例的相关方法,如 question 方法输入
  • 监听 readlineclose 事件

一旦执行,Node.js 应用程序将不会终止,直到 readline.Interface 关闭,因为接口在输入流上等待接收数据。

当所有操作的完成时,我们使用 close 方法来结束程序。close 方法会触发 close 事件:

rl.on('close', () => {
  console.log('退出程序')
  process.exit(0)
})

readline 属性和方法

  • clearLine() 清除指定流的当前行
  • clearScreenDown() 从当前光标向下位置清除指定的流
  • createInterface() 创建一个接口对象
  • cursorTo() 将光标移动到指定位置
  • emitKeypressEvents() 为指定流触发按键事件
  • moveCursor() 将光标移动到相对于当前位置的新位置

示例:打开一个文件并逐行返回内容

使用 line 事件,逐行读取文件内容:

const readline = require('readline')
const fs = require('fs')

const rl = readline.createInterface({
  input: fs.createReadStream('./package.json')
})

let lineno = 0
rl.on('line', (line) => {
  lineno++
  console.log(`Line number ${lineno}': ${line}`)
})

详细 API 请查阅文档

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐