Node.js util 工具函数模块
util 模块提供一系列实用工具函数,辅助日常开发任务。
引入模块
JavaScript
const util = require('util');
util.promisify
将回调式函数转换为 Promise:
JavaScript
const fs = require('fs');
// 传统回调方式
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// 使用 promisify 转换
const readFile = util.promisify(fs.readFile);
readFile('file.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
// 或使用 async/await
async function read() {
const data = await readFile('file.txt', 'utf8');
console.log(data);
}
util.promisify 自定义实现
JavaScript
// 对自定义函数使用 promisify
function delay(callback) {
setTimeout(() => {
callback(null, '完成');
}, 1000);
}
const delayPromise = util.promisify(delay);
await delayPromise(); // '完成'
util.format
格式化字符串,类似 printf:
JavaScript
// %s - 字符串
console.log(util.format('Hello %s', 'World')); // Hello World
// %d - 数字
console.log(util.format('Count: %d', 42)); // Count: 42
// %j - JSON
console.log(util.format('Data: %j', { a: 1 })); // Data: {"a":1}
// %o - 对象(完整显示)
console.log(util.format('Obj: %o', { a: 1, b: 2 }));
// 多参数
console.log(util.format('%s is %d years old', 'Tom', 25));
util.inspect
将对象转换为字符串,用于调试:
JavaScript
const obj = { a: 1, b: { c: 2, d: [3, 4, 5] } };
// 基本用法
console.log(util.inspect(obj));
// 设置深度
console.log(util.inspect(obj, { depth: 1 })); // 限制嵌套深度
// 显示隐藏属性
console.log(util.inspect(obj, { showHidden: true }));
// 彩色输出
console.log(util.inspect(obj, { colors: true }));
// 紧凑模式
console.log(util.inspect(obj, { compact: false }));
util.types
类型判断工具:
JavaScript
// 判断是否为 Promise
console.log(util.types.isPromise(Promise.resolve())); // true
// 判断是否为数组
console.log(util.types.isArrayBuffer(new ArrayBuffer(8))); // true
// 判断是否为 Date
console.log(util.types.isDate(new Date())); // true
// 判断是否为 Map
console.log(util.types.isMap(new Map())); // true
// 判断是否为 Set
console.log(util.types.isSet(new Set())); // true
// 判断是否为 RegExp
console.log(util.types.isRegExp(/test/)); // true
util.callbackify
将 Promise 函数转换为回调式:
JavaScript
async function asyncFunc() {
return '结果';
}
const callbackFunc = util.callbackify(asyncFunc);
callbackFunc((err, result) => {
console.log(result); // '结果'
});
util.deprecate
标记函数已弃用:
JavaScript
// 标记弃用函数
const oldFunc = util.deprecate(
() => console.log('执行旧函数'),
'oldFunc 已弃用,请使用 newFunc'
);
oldFunc();
// 输出: 执行旧函数
// 警告: (node:123) DeprecationWarning: oldFunc 已弃用,请使用 newFunc
util.styleText
样式化文本(Node.js 20+):
JavaScript
// 彩色文本
console.log(util.styleText('red', '红色文字'));
console.log(util.styleText(['green', 'bold'], '绿色加粗'));
console.log(util.styleText('yellow', '警告信息'));
实用示例
JavaScript
const fs = require('fs');
const util = require('util');
// 批量转换 fs 方法为 Promise
const readFile = util.promisify(fs.readFile);
const writeFile = util.promisify(fs.writeFile);
const stat = util.promisify(fs.stat);
async function checkFile(path) {
try {
const stats = await stat(path);
console.log(util.format('文件大小: %d bytes', stats.size));
const data = await readFile(path, 'utf8');
console.log(util.inspect({ path, size: stats.size }, { colors: true }));
} catch (err) {
console.error(util.styleText('red', err.message));
}
}
要点总结
- util.promisify 将回调函数转换为 Promise
- util.format 格式化字符串(%s, %d, %j)
- util.inspect 对象转字符串,用于调试输出
- util.types 提供各种类型判断方法
- util.deprecate 标记弃用函数并输出警告
📝 发现内容有误?点击此处直接编辑