- NodeJs的介绍及使用
- Node.js核心模块概览
- NodeJs-Assertion Testing
- NodeJs-Asynchronous Context Tracking
- NodeJs-async_hooks
- NodeJs-Buffer
- Node.js- C++ Addons
- Node.js-C++ Addons Node-API
- NodeJs-C++ Embedder API
- Node.js-Child Process
- NodeJs-Cluster
- Node.js-命令行选项
- Node.js-Console
- Node.js-Corepack
- Node.js-Crypto
- NodeJs-Debugger
- NodeJs-Diagnostics Channel
- NodeJs-DNS
- NodeJs-Domain
- NodeJs-Errors
- NodeJs-Events
- NodeJs-File system(一)
- NodeJs-File system(二)
- NodeJs-File system(三)
- NodeJs-Globals
- NodeJs-HTTP
- NodeJs-HTTP/2
- NodeJs-HTTPS
- NodeJs-Inspector
- NodeJs-Internationalization
- NodeJs-Modules CommonJS modules、ECMAScript modules、node:module、Packages、TypeScript
- NodeJs-Net
- NodeJs-OS
- NodeJs-path
- NodeJs-Performance Hooks
- NodeJs-Permissions
- NodeJs-process
- NodeJs-punycode
- Node.js-querystring
- NodeJs-Readline
- NodeJs-REPL
- NodeJs-Report
- NodeJs-Single Executable Applications
- NodeJs-SQLite
- NodeJs-Stream
- NodeJs-String Decoder
- NodeJs-Test runner
- NodeJs-Timers
- NodeJs-TLS/SSL
- NodeJs-Trace events
- NodeJs-TTY
- NodeJs-UDP/datagram
- NodeJs-URL
- NodeJs-Utilities
- NodeJs-V8
- NodeJs-VM
- NodeJs-WASI
- NodeJs-Web Crypto API
- NodeJs Web Streams API
- NodeJs Worker threads
- NodeJs-Zlib
- NodeJs-Single Executable Applications
NodeJs-Utilities
class Utilities,UtilNode.js 的 util
模块提供了许多实用的函数和工具,帮助开发者处理调试、继承、类型检查等常见的任务。util
模块特别适合进行日志记录、格式化输出以及处理异步操作等。以下是该模块的所有属性和方法的详细介绍及使用示例,涵盖了模块的各个方面。
1. 引入 util
模块
首先,通过 require
引入 util
模块:
const util = require('util');
2. util.format()
util.format(format, [...args])
方法用于字符串格式化,它类似于 printf
这样的函数。
%s
:字符串%d
:数字(包括整数和浮点数)%i
:整数%f
:浮点数%j
:JSON%%
:百分号(不会被替换)
示例:
const util = require('util');
const str = util.format('My name is %s, and I am %d years old.', 'Alice', 30);
console.log(str); // 输出: My name is Alice, and I am 30 years old.
3. util.inspect()
util.inspect(object, [options])
方法用于将任意对象转为字符串,适合用于调试和日志记录。它会对对象进行递归输出,提供对嵌套对象的完整查看。
showHidden
:默认false
,显示隐藏属性。depth
:递归显示对象的层级深度,默认值为2
。colors
:输出是否带颜色,默认值为false
。customInspect
:如果true
,则对象的inspect()
方法会被调用,默认值为true
。
示例:
const util = require('util');
const obj = { a: 5, b: { c: 10 } };
console.log(util.inspect(obj, { showHidden: false, depth: null, colors: true }));
4. util.types
util.types
提供了一系列用于类型检查的工具函数,类似于 typeof
和 instanceof
,但更为准确。
常用方法:
util.types.isDate(value)
:检查对象是否是Date
。util.types.isRegExp(value)
:检查对象是否是正则表达式。util.types.isSet(value)
:检查对象是否是Set
。util.types.isMap(value)
:检查对象是否是Map
。
示例:
const util = require('util');
console.log(util.types.isDate(new Date())); // true
console.log(util.types.isRegExp(/abc/)); // true
console.log(util.types.isMap(new Map())); // true
console.log(util.types.isSet(new Set())); // true
5. util.callbackify()
util.callbackify()
将返回一个把 async
函数转换为遵循错误优先风格的回调函数的函数。返回的函数会将异步函数的结果传递给回调。
示例:
const util = require('util');
async function foo() {
return 'Hello';
}
const callbackFoo = util.callbackify(foo);
callbackFoo((err, result) => {
if (err) throw err;
console.log(result); // 输出: 'Hello'
});
6. util.promisify()
util.promisify()
将传统的回调风格函数(即最后一个参数是回调函数的函数)转换为返回 Promise
的函数。
示例:
const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
readFile('./example.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
7. util.deprecate()
util.deprecate()
方法用于将某个函数标记为废弃。调用被废弃的函数时,会显示一条警告信息。适用于标记不推荐使用的 API。
示例:
const util = require('util');
const oldFunc = util.deprecate(() => {
console.log('This function is deprecated');
}, 'oldFunc() is deprecated and will be removed in future versions');
oldFunc(); // 调用时会输出警告信息
8. util.inherits()
util.inherits(constructor, superConstructor)
是用于对象原型继承的工具函数,帮助简化构造函数的继承。注意:在 ES6 中推荐使用 class
和 extends
。
示例:
const util = require('util');
function Person() {
this.name = 'Alice';
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
function Student() {
Person.call(this);
this.age = 20;
}
util.inherits(Student, Person);
const student = new Student();
student.sayHello(); // 输出: Hello, my name is Alice
9. util.TextEncoder
和 util.TextDecoder
TextEncoder
和 TextDecoder
是用于处理文本编码和解码的工具,可以将字符串编码为 Uint8Array
,或从字节数组解码为字符串。
示例:
const { TextEncoder, TextDecoder } = require('util');
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const encoded = encoder.encode('Hello, world!');
console.log(encoded); // 输出: Uint8Array
const decoded = decoder.decode(encoded);
console.log(decoded); // 输出: 'Hello, world!'
10. util.log()
util.log()
是一个简单的日志记录函数,输出信息并附带时间戳。
示例:
const util = require('util');
util.log('Server started'); // 输出: '21 Sep 10:56:23 - Server started'
11. util.getSystemErrorName()
util.getSystemErrorName()
接受一个错误码,返回对应的系统错误名称(如 ENOENT
, EADDRINUSE
等)。
示例:
const util = require('util');
const errorName = util.getSystemErrorName(-2);
console.log(errorName); // 输出: ENOENT
12. util.debuglog()
util.debuglog()
创建一个用于调试的日志函数,该函数仅在特定环境变量被设置时输出日志信息。
示例:
const util = require('util');
const debuglog = util.debuglog('myapp');
debuglog('Debugging message: %o', { foo: 'bar' });
要启用日志输出,需要设置环境变量 NODE_DEBUG=myapp
。
13. util.inspect.custom
util.inspect.custom
是一个用于定制对象的 util.inspect()
输出的符号。通过实现该属性,可以控制对象在被 util.inspect()
时的输出行为。
示例:
const util = require('util');
class MyClass {
constructor() {
this.foo = 'bar';
}
[util.inspect.custom]() {
return 'MyClass instance';
}
}
const myInstance = new MyClass();
console.log(util.inspect(myInstance)); // 输出: MyClass instance
14. util.promisify.custom
util.promisify.custom
是一个符号,用于定义 promisify
方法的自定义行为。通过实现该属性,函数可以自定义如何被 util.promisify()
转换。
示例:
const util = require('util');
function customAsyncFunction(callback) {
callback(null, 'result');
}
customAsyncFunction[util.promisify.custom] = () => {
return Promise.resolve('custom result');
};
const promisified = util.promisify(customAsyncFunction);
promisified().then(result => {
console.log(result); // 输出: 'custom result'
});
总结
Node.js 的 util
模块为开发者提供了一系列实用工具,简化了开发过程中常见任务的处理。它支持字符串格式化、对象的调试输出、类型检查、异步函数的处理等功能,非常适合在 Node.js 环境中进行快速开发和调试。