📅  最后修改于: 2023-12-03 15:33:10.176000             🧑  作者: Mango
Node.js util 模块提供了一些有用的函数来处理不同种类的数据类型、文件系统等,方便程序员进行开发。在本篇文章中,我们将介绍其中一些常用的工具函数及其使用方法。
util.inherits是一个继承函数,让一个构造函数继承另一个构造函数的原型对象。比如:
const EventEmitter = require('events');
const util = require('util');
function MyStream() {
EventEmitter.call(this);
}
util.inherits(MyStream, EventEmitter);
MyStream.prototype.write = function(data) {
this.emit('data', data);
};
const stream = new MyStream();
stream.on('data', function(data) {
console.log('Received data: ' + data);
});
stream.write('It works!'); // 输出 'Received data: It works!'
在上述例子中,我们定义了一个继承自EventEmitter的MyStream类,当调用MyStream.prototype.write时会触发事件“data”,最后我们通过实例化对象stream来使用该类。
util.inspect用于打印一个对象,可以方便地查看对象的结构。它支持自定义选项,可以配置输出结果的风格。比如:
const arr = [1, 2, { a: 3, b: 4 }, [5, 6], 'Hello World'];
console.log(util.inspect(arr, { showHidden: true, depth: null }));
在上述例子中,我们使用了showHidden和depth两个选项来打印arr数组的元素,其中showHidden表示是否输出隐藏属性,depth则表示对象的递归深度,默认为2。
util.format可以将不同类型的参数格式化成一个字符串,常用于快速生成日志信息等。比如:
const name = 'Tom', age = 20;
const str = util.format('Hello, my name is %s and I am %d years old!', name, age);
console.log(str); // 输出 'Hello, my name is Tom and I am 20 years old!'
在上述例子中,我们使用%s和%d两个占位符将name和age变量格式化成字符串,并拼接在一起。
util.promisify可以将一个异步函数转换为返回Promise的函数,方便地实现异步编程。比如:
const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
async function main() {
try {
const data = await readFile('./test.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
}
main();
在上述例子中,我们将fs.readFile方法转换为返回Promise的Promise.readFile方法,使用async/await语法进行异步处理。
本文介绍了Node.js util模块中一些常用的工具函数及其使用方法。其中,util.inherits可以方便地实现继承功能,util.inspect可以打印对象的结构,util.format可以快速生成格式化的字符串,util.promisify可以实现异步编程。开发者可以根据自己的需求选用不同的函数来简化开发流程,提高代码质量。