全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 6 分钟 ✍️ juanwangdev

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 标记弃用函数并输出警告

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js path 路径模块
下一篇 → Node.js Buffer 缓冲区
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库