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类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 Javascript
javascript属性访问表达式用法分析
Apr 25 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
css如何让浮动元素水平居中
Aug 07 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
Mac系统下Webstorm快捷键整理大全
May 28 Javascript
JS中offset和匀速动画详解
Feb 06 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
vue 解决循环引用组件报错的问题
Sep 06 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 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环境无法上传文件的解决方法
2014/04/30 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
详谈python read readline readlines的区别
2017/09/22 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
会计专业推荐信
2013/10/29 职场文书
销售演讲稿范文
2014/01/08 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
python基础之文件操作
2021/10/24 Python