Node.js中的readline模块和util模块是常见的核心模块,用于处理控制台输入输出和各种工具函数的使用,我们通常会在Node.js CLI程序中使用到它们,接下来我将为您介绍它们的使用方法。
readline模块的使用
readline模块提供了一些实用工具,可以从流中读取数据,读取过程是逐行进行的,通常读取标准输入流中的数据。下面是readline模块的使用流程:
步骤1:引入readline模块
const readline = require('readline');
步骤2:创建readline实例
const rl = readline.createInterface({
input: process.stdin, // 输入流
output: process.stdout // 输出流
});
在这里,我们用process.stdin
定义输入流,用process.stdout
定义输出流,这样的好处是可以直接输出提示信息,而不必自己处理流的读写。
步骤3:读取控制台的输入
rl.question('What is your name? ', (answer) => {
console.log(`Hello, ${answer}!`);
rl.close();
});
rl.question()
方法可以从控制台读取用户输入。在读取到输入后,它会执行回调函数,并将输入的结果作为回调函数的第一个参数传递。
示例1:一个简单的控制台交互程序
以下示例展示了如何使用readline模块在控制台与用户进行交互。代码实现的功能是:读取用户的姓名和年龄,然后输出这些信息。
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What is your name? ', (name) => {
rl.question('How old are you? ', (age) => {
console.log(`${name} is ${age} years old.`);
rl.close();
});
});
示例2:从文件中逐行读取数据
以下示例展示了如何使用readline模块从一个文件中逐行读取数据并输出。
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: fs.createReadStream('example.txt')
});
rl.on('line', (line) => {
console.log(`Line from file: ${line}`);
});
在这里,我们使用了fs.createReadStream()
方法创建了一个读取当前目录下的example.txt
文件的可读流,然后传递给readline.createInterface()
方法,由此建立了一个基于文件的逐行读取器。每当读取到一行数据,就会执行回调函数,并将读取的行字符串传递给它。
util模块的使用
util模块提供了很多实用工具函数,这些函数都是Node.js核心模块提供的,可以帮助我们更方便地编写JavaScript代码。下面是util模块的使用流程:
步骤1:引入util模块
const util = require('util');
步骤2:使用util模块中的工具函数
例如,我们可以使用util.format()
函数将字符串格式化为一个新的字符串:
const util = require('util');
const message = util.format('Hello, %s!', 'world');
console.log(message); // Hello, world!
该函数的第一个参数是要格式化的字符串,后面的参数是要插入到字符串中的内容,返回的结果是一个新的格式化后的字符串。
示例1:继承原型链
以下示例展示了如何使用util模块中的util.inherits()
函数实现原型链继承。
const util = require('util');
function Animal() {}
Animal.prototype.say = function() {
console.log('The animal is saying something...');
};
function Cat() {}
util.inherits(Cat, Animal);
Cat.prototype.say = function() {
console.log('Meow Meow~');
};
const cat = new Cat();
cat.say(); // Meow Meow~
在这里,我们首先定义了一个Animal
构造函数和一个Cat
构造函数,然后通过util.inherits()
函数将Cat
的原型链连接到Animal
的原型链上,这样Cat
实例就可以继承Animal
原型链上的方法。接着我们给Cat
添加一个say()
方法,在这个方法内部打印出“Meow Meow~”字符串。最后我们创建一个Cat
实例调用say()
方法输出结果。
示例2:将一个函数封装为异步函数
以下示例展示了如何将一个普通函数封装为异步函数,使它能够支持Promise。
const util = require('util');
function readFile(path, callback) {
const fs = require('fs');
fs.readFile(path, (err, data) => {
callback(err, data);
});
}
const readFilePromise = util.promisify(readFile);
readFilePromise('example.txt')
.then((data) => {
console.log(data);
})
.catch((err) => {
console.log(err);
});
在这里,我们定义了一个readFile()
函数,这个函数接受一个文件路径作为参数,在读取文件后执行回调函数,并将读取的数据作为回调函数的第二个参数传递。然后我们使用util.promisify()
函数将这个函数封装为一个Promise函数,所以我们可以使用then()
和catch()
方法来进行异步编程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js readline模块与util模块的使用 - Python技术站