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监听浏览器的问题
Jun 23 Javascript
关于JavaScript定义类和对象的几种方式
Nov 09 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
jquery 实现回车登录详解及实例代码
Oct 23 Javascript
JavaScript中闭包的详解
Apr 01 Javascript
Bootstrap按钮组实例详解
Jul 03 Javascript
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
vue的toast弹窗组件实例详解
May 14 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
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 MSSQL 存储过程的方法
2008/12/24 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
Django model反向关联名称的方法
2018/12/15 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
优秀员工自荐书范文
2013/12/08 职场文书
高二物理教学反思
2014/02/08 职场文书
年会搞笑主持词
2014/03/27 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
保护环境倡议书
2014/04/14 职场文书
小学生教师节广播稿
2015/08/19 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python