公司动态

HoRain云--Node.js 常用工具

📅 2026/8/28 18:44:14
HoRain云--Node.js 常用工具
util模块是 Node.js 的一个内置模块包含了实用工具函数用于支持 JavaScript 编程中的调试、错误处理、格式化等功能。util提供常用函数的集合用于弥补核心 JavaScript 的功能过于精简的不足。util模块中的功能涵盖了从对象检查、继承到格式化字符串等多个方面。导入 util 模块首先你需要导入 util 模块const util require(util);常用方法方法描述util.format(format, ...args)字符串格式化支持%s、%d、%j占位符。util.inspect(object[, options])将对象转换为字符串用于调试。util.promisify(function)将回调风格的函数转换为返回 Promise 的函数。util.callbackify(fn)将返回 Promise 的函数转换为回调风格函数。util.inherits(constructor, superConstructor)让一个构造函数继承另一个构造函数的原型方法。util.deprecate(fn, message)标记函数为废弃调用时会打印警告消息。util.types包含多种类型检测方法的集合例如isAnyArrayBuffer、isBigInt64Array。util.isDeepStrictEqual(val1, val2)判断两个值是否深度相等类似于深度比较。util.getSystemErrorName(err)根据错误码返回系统错误名称。util.inspect.custom一个 Symbol可以定义自定义的inspect行为用于调试。util.types 下的类型检测方法util.types 是一个包含许多类型检测方法的集合扩展了 JavaScript 的 typeof 和 instanceof。方法描述util.types.isAnyArrayBuffer(value)检查值是否为ArrayBuffer或SharedArrayBuffer。util.types.isArrayBuffer(value)检查值是否为ArrayBuffer。util.types.isAsyncFunction(value)检查值是否为异步函数。util.types.isBigInt64Array(value)检查值是否为BigInt64Array。util.types.isBigUint64Array(value)检查值是否为BigUint64Array。util.types.isBooleanObject(value)检查值是否为布尔对象。util.types.isDataView(value)检查值是否为DataView。util.types.isDate(value)检查值是否为Date。util.types.isGeneratorFunction(value)检查值是否为生成器函数。util.types.isMap(value)检查值是否为Map。util.types.isSet(value)检查值是否为Set。util.types.isRegExp(value)检查值是否为正则表达式。util.types.isSymbolObject(value)检查值是否为符号对象。应用实例util.format() - 字符串格式化util.format() 用于生成格式化字符串支持占位符如 %s、%d 和 %j分别代表字符串、数字和 JSON。实例const util require(util);const name Alice;const age 25;console.log(util.format(Name: %s, Age: %d, name, age)); // 输出: Name: Alice, Age: 25util.promisify() - 转换回调函数为 Promiseutil.promisify() 将传统回调风格的函数转换为返回 Promise 的函数从而可以与 async/await 一起使用。实例const util require(util);const fs require(fs);// 将回调风格的 fs.readFile 转换为返回 Promise 的函数const readFileAsync util.promisify(fs.readFile);(async () {try {const data await readFileAsync(example.txt, utf8);console.log(data);} catch (err) {console.error(err);}})();util.callbackify() - 将 Promise 转换为回调util.callbackify() 将返回 Promise 的函数转换为回调风格的函数便于在需要回调的代码环境中使用。util.callbackify(original) 将async异步函数或者一个返回值为Promise的函数转换成遵循异常优先的回调风格的函数例如将(err, value) ...回调作为最后一个参数。 在回调函数中第一个参数为拒绝的原因如果Promise解决则为null第二个参数则是解决的值。实例const util require(util);async function fn() {return hello world;}const callbackFunction util.callbackify(fn);callbackFunction((err, ret) {if (err) throw err;console.log(ret);});以上代码输出结果为hello world回调函数是异步执行的并且有异常堆栈错误追踪。 如果回调函数抛出一个异常进程会触发一个 uncaughtException 异常如果没有被捕获进程将会退出。null 在回调函数中作为一个参数有其特殊的意义如果回调函数的首个参数为 Promise 拒绝的原因且带有返回值且值可以转换成布尔值 false这个值会被封装在 Error 对象里可以通过属性 reason 获取。function fn() { return Promise.reject(null); } const callbackFunction util.callbackify(fn); callbackFunction((err, ret) { // 当 Promise 被以 null 拒绝时它被包装为 Error 并且原始值存储在 reason 中。 err err.hasOwnProperty(reason) err.reason null; // true });original 为 async 异步函数。该函数返回传统回调函数。util.deprecate() - 标记函数为废弃util.deprecate() 用于标记不推荐使用的函数调用时会显示警告信息。实例const util require(util);const oldFunction util.deprecate(() {console.log(This function is deprecated);}, oldFunction is deprecated. Use newFunction instead.);oldFunction(); // 调用时会显示警告util.types - 数据类型检测util.types 提供了一组方法来检测特定数据类型扩展了 typeof 和 instanceof 的功能。实例const util require(util);console.log(util.types.isDate(new Date())); // trueconsole.log(util.types.isMap(new Map())); // trueutil.inheritsutil.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。JavaScript 的面向对象特性是基于原型的与常见的基于类的不同。JavaScript 没有提供对象继承的语言级别特性而是通过原型复制来实现的。在这里我们只介绍 util.inherits 的用法示例如下var util require(util); function Base() { this.name base; this.base 1991; this.sayHello function() { console.log(Hello this.name); }; } Base.prototype.showName function() { console.log(this.name); }; function Sub() { this.name sub; } util.inherits(Sub, Base); var objBase new Base(); objBase.showName(); objBase.sayHello(); console.log(objBase); var objSub new Sub(); objSub.showName(); //objSub.sayHello(); console.log(objSub);我们定义了一个基础对象 Base 和一个继承自 Base 的 SubBase 有三个在构造函数内定义的属性和一个原型中定义的函数通过util.inherits 实现继承。运行结果如下base Hello base { name: base, base: 1991, sayHello: [Function] } sub { name: sub }注意Sub 仅仅继承了Base 在原型中定义的函数而构造函数内部创造的 base 属 性和 sayHello 函数都没有被 Sub 继承。同时在原型中定义的属性不会被 console.log 作 为对象的属性输出。如果我们去掉 objSub.sayHello(); 这行的注释将会看到node.js:201 throw e; // process.nextTick error, or error event on first tick ^ TypeError: Object #lt;Subgt; has no method sayHello at Object.lt;anonymousgt; (/home/byvoid/utilinherits.js:29:8) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)注意在 ES6 出现之前util.inherits 是 Node.js 中实现继承的主要方法。但是ES6 之后推荐使用 class 和 extends 语法这样继承的代码更具可读性。util.inspect() - 打印对象结构util.inspect(object[, options])将对象转换为字符串表示形式便于调试。util.inspect() 将对象转换为字符串形式常用于调试以查看对象的详细结构和属性。可以指定 options 参数来控制输出格式。实例const obj { a: 1, b: 2, c: { d: 3 } };console.log(util.inspect(obj, { showHidden: false, depth: null, colors: true }));util.isArray(object)如果给定的参数 object 是一个数组返回 true否则返回 false。var util require(util); util.isArray([]) // true util.isArray(new Array) // true util.isArray({}) // falseutil.isRegExp(object)如果给定的参数 object 是一个正则表达式返回true否则返回false。var util require(util); util.isRegExp(/some regexp/) // true util.isRegExp(new RegExp(another regexp)) // true util.isRegExp({}) // falseutil.isDate(object)如果给定的参数 object 是一个日期返回true否则返回false。var util require(util); util.isDate(new Date()) // true util.isDate(Date()) // false (without new returns a String) util.isDate({}) // false