Node.js API详解之 util模块用法实例分析


Posted in Javascript onMay 09, 2020

本文实例讲述了Node.js API详解之 util模块用法。分享给大家供大家参考,具体如下:

Node.js API详解之 util

util 模块主要用于支持 Node.js 内部 API 的需求。提供了大部分实用工具。
通过 const util = require(‘util'); 的方式引用util模块

util.callbackify(original)

说明:

original:传递一个 async 函数,或者是一个返回Promise的异步函数。
callbackify会返回一个方法,执行该方法时传递一个回调函数,回调函数的第一个参数是err,第二个是异步函数的返回值。

demo:

const util = require('util');
async function fn() {
 return await Promise.resolve('hello isjs');
}
const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret) => {
 if (err) throw err;
 console.log(ret);
});
//输出: hello isjs

util.debuglog(section)

说明:

util.debuglog() 方法用于创建一个函数,基于 NODE_DEBUG 环境变量的存在与否有条件地写入调试信息到 stderr。
如果 section 名称在环境变量的值中,则返回的函数类似于 console.error()。 否则,返回的函数是一个空操作。
section:一个字符串,指定要为应用的哪些部分创建 debuglog 函数。

demo:

const util = require('util');
const debuglog = util.debuglog('foo');
debuglog('hello from foo [%d]', 123);

util.deprecate(function, string)

说明:

该方法会包装给定的 function 或类,并标记为废弃的。

demo:

const util = require('util');
function isBoolean(obj){
 return (obj === true || obj === false);
}
isBoolean = util.deprecate(isBoolean, 'isBoolean 方法已被废弃');
isBoolean(true);
//输出:(node:9911) DeprecationWarning: isBoolean 方法已被废弃

util.format(format[, …args])

说明:

util.format() 方法返回一个格式化后的字符串,
format:第一个参数是一个字符串,包含零个或多个占位符。
每个占位符会被对应参数转换后的值所替换。 支持的占位符有:
%s:字符串
%d:数值(整数或浮点数)
%i:整数
%f:浮点数
%j ? JSON
%o ? Object(包括不可枚举的属性方法)
%O ? Object(不包括不可枚举属性)
%% ? 单个百分号('%')不消耗参数。

demo:

const util = require('util');
var formatString = util.format('%s %d %i %f %j', 'hello', 1.123, 123, 2.1, "{'name': 'xiao', 'age': '18'}");
console.log(formatString);
//e输出: hello 1.123 123 2.1 "{'name': 'xiao', 'age': '18'}"
//如果占位符没有对应的参数,则占位符不被替换。
formatString = util.format('%s , %s', 'hello');
console.log(formatString);
//输出: hello , %s
//如果传入的参数比占位符的数量多,则多出的参数会被强制转换为字符串,
//然后拼接到返回的字符串,参数之间用一个空格分隔。
formatString = util.format('%s , %s', 'hello', 'isjs', '!');
console.log(formatString);
//输出: hello , isjs !
//如果第一个参数不是一个字符串,则返回一个所有参数用空格分隔并连在一起的字符串
formatString = util.format(1, 2, 3);
console.log(formatString);
//输出: 1 2 3
//如果只传入占位符而不传入参数,则原样返回
formatString = util.format('%% , %s');
console.log(formatString);
//输出: %% , %s

util.inherits(constructor, superConstructor)

说明:

注意,不建议使用 util.inherits()。 请使用 ES6 的 class 和 extends 关键词获得语言层面的继承支持。
从一个构造函数中继承原型方法到另一个。
constructor 的 prototype 会被设置到一个从 superConstructor 创建的新对象上。
superConstructor 可通过 constructor.super_ 属性访问

demo:

const util = require('util');
const EventEmitter = require('events');
function MyStream() { 
 EventEmitter.call(this);
}
util.inherits(MyStream, EventEmitter);
MyStream.prototype.write = function(data) {
 this.emit('data', data);
};
const stream = new MyStream();
console.log(stream instanceof EventEmitter); // true
console.log(MyStream.super_ === EventEmitter); // true
stream.on('data', (data) => {
 console.log(`接收的数据:"${data}"`);
});
stream.write('运作良好!'); // 接收的数据:"运作良好!"
//建议使用 ES6 的 class 和 extends:
const EventEmitter = require('events');
class MyStream extends EventEmitter {
 write(data) {
 this.emit('data', data);
 }
}
const stream = new MyStream();
stream.on('data', (data) => {
 console.log(`接收的数据:"${data}"`);
});
stream.write('使用 ES6');

util.inspect(object[, options])

说明:

方法返回 object 的字符串表示,主要用于调试。
object: 任何 JavaScript 原始值或对象
options: 可用于改变格式化字符串的某些方面。

demo:

const util = require('util');
const inspectOpt = {
 showHidden: false,//如果为 true,则 object 的不可枚举的符号与属性也会被包括在格式化后的结果中。
 depth: 2,//指定格式化 object 时递归的次数。 默认为 2。 若要无限地递归则传入 null。
 colors: false,//如果为 true,则输出样式使用 ANSI 颜色代码。 默认为 false。
 customInspect: true,//如果为 false,则 object 上自定义的 inspect(depth, opts) 函数不会被调用。 默认为 true
 showProxy: false,//如果为 true,则 Proxy 对象的对象和函数会展示它们的 target 和 handler 对象。 默认为 false
 maxArrayLength: 100,//指定格式化时数组和 TypedArray 元素能包含的最大数量。 默认为 100。 设为 null 则显式全部数组元素。 设为 0 或负数则不显式数组元素。
 breakLength: 60//一个对象的键被拆分成多行的长度。 设为 Infinity 则格式化一个对象为单行。 默认为 60。
};
console.log(util.inspect(util, inspectOpt));

util.inspect.styles, util.inspect.colors

说明:

可以通过 util.inspect.styles 和 util.inspect.colors 属性全局地自定义 util.inspect 的颜色输出(如果已启用)。
预定义的颜色代码有:white、grey、black、blue、cyan、green、magenta、red 和 yellow。
还有 bold、italic、underline 和 inverse 代码。
颜色样式使用 ANSI 控制码,可能不是所有终端都支持。

demo:

const util = require('util');
console.log(util.inspect.styles);
// { special: 'cyan',
// number: 'yellow',
// boolean: 'yellow',
// undefined: 'grey',
// null: 'bold',
// string: 'green',
// symbol: 'green',
// date: 'magenta',
// regexp: 'red' }
console.log(util.inspect.colors);
// { bold: [ 1, 22 ],
// italic: [ 3, 23 ],
// underline: [ 4, 24 ],
// inverse: [ 7, 27 ],
// white: [ 37, 39 ],
// grey: [ 90, 39 ],
// black: [ 30, 39 ],
// blue: [ 34, 39 ],
// cyan: [ 36, 39 ],
// green: [ 32, 39 ],
// magenta: [ 35, 39 ],
// red: [ 31, 39 ],
// yellow: [ 33, 39 ] }

util.inspect.custom

说明:

util.inspect.custom是一个符号,可被用于声明自定义的查看函数:[util.inspect.custom](depth, opts)
自定义 inspect 方法的返回值可以使任何类型的值,它会被 util.inspect() 格式化。

demo:

const util = require('util');
class Box {
 [util.inspect.custom](depth, options) {
 return "myInspect";
 }
}
const box = new Box();
console.log(util.inspect(box));
// 输出:myInspect

util.inspect.defaultOptions

说明:

defaultOptions 值允许对 util.inspect 使用的默认选项进行自定义。
它需被设为一个对象,包含一个或多个有效的 util.inspect() 选项。 也支持直接设置选项的属性。

demo:

const util = require('util');
util.inspect.defaultOptions = {
 showHidden: true,
 depth:3
};
util.inspect.defaultOptions.breakLength = 30;
console.log(util.inspect.defaultOptions);
// { showHidden: true,
// depth: 3,
// colors: false,
// customInspect: true,
// showProxy: false,
// maxArrayLength: 100,
// breakLength: 30 }

util.promisify(original)

说明:

让一个遵循通常的 Node.js error first回调风格的函数,回调函数是最后一个参数, 返回一个返回值是一个 promise 版本的函数。

demo:

const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
 // Do something with `stats`
}).catch((error) => {
 // Handle the error.
});

util.promisify.custom

说明:

使用util.promisify.custom符号可以自定义promisified功能。

demo:

const util = require('util');
function doSomething(foo, callback) {
 // ...
}
doSomething[util.promisify.custom] = function(foo) {
 return getPromiseSomehow();
};
const promisified = util.promisify(doSomething);
console.log(promisified === doSomething[util.promisify.custom]);
// 输出: true

类:util.TextEncoder

说明:

该类用来对文本进行编码

textEncoder.encode([input])

说明:

对input字符串进行编码并返回一个Uint8Array包含编码字节的字符串

textEncoder.encoding

说明:

TextEncoder实例支持的编码。总是设置为'utf-8'。

demo:

const encoder = new TextEncoder();
const uint8array = encoder.encode('this is some data');
console.log(encoder.encoding)
//utf-8

类:util.TextDecoder

说明:

该类用来解析编码后的文本

new TextDecoder([encoding[, options]])

说明:

创建一个TextDecoder实例。
encoding: 编码方式,默认'utf-8′
options: 选项
fatal: 解码发生的错误将导致 TypeError被抛出。默认为 false
ignoreBOM: 解码结果中是否会包含字节顺序标记。默认为false。仅当encoding的值为'utf-8','utf-16be'或'utf-16le'时有效。

textDecoder.decode([input[, options]])

说明:

解码input并返回一个字符串。
input: 待解码数据
options.stream: 如果需要额外的数据块,设置为true。默认为false。

textDecoder.encoding

说明:

返回textDecoder实例支持的编码。

textDecoder.fatal

说明:

返回textDecoder实例的fatal属性,

textDecoder.ignoreBOM

说明:

返回解码结果是否包含字节顺序标记

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
获取JavaScript用户自定义类的类名称的代码
Mar 08 Javascript
JavaScript中yield实用简洁实现方式
Jun 12 Javascript
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
js和as的稳定传值问题解决
Jul 14 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
javascript操作excel生成报表示例
May 08 Javascript
jquery处理json对象
Nov 03 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
浅谈javascript中的数据类型转换
Dec 27 Javascript
jquery dialog获取焦点的方法
Feb 09 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
Vue实现PC端靠边悬浮球的代码
May 09 #Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 #Javascript
基于JavaScript实现表格隔行换色
May 08 #Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
May 09 #Javascript
基于JQuery实现页面定时弹出广告
May 08 #jQuery
使用vue cli4.x搭建vue项目的过程详解
May 08 #Javascript
JQuery复选框全选效果如何实现
May 08 #jQuery
You might like
php学习 字符串课件
2008/06/15 PHP
php 动态多文件上传
2009/01/18 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
Keras设置以及获取权重的实现
2020/06/19 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
信息专业大学生自我评价分享
2014/01/17 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
物业品质提升方案
2014/06/08 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
Python基础之数据结构详解
2021/04/28 Python
python多线程方法详解
2022/01/18 Python