Node.js API详解之 util模块用法实例分析
本文实例讲述了Node.jsAPI详解之util模块用法。分享给大家供大家参考,具体如下:
Node.jsAPI详解之util
util模块主要用于支持Node.js内部API的需求。提供了大部分实用工具。
通过constutil=require(‘util');的方式引用util模块
util.callbackify(original)
说明:
original:传递一个async函数,或者是一个返回Promise的异步函数。
callbackify会返回一个方法,执行该方法时传递一个回调函数,回调函数的第一个参数是err,第二个是异步函数的返回值。
demo:
constutil=require('util');
asyncfunctionfn(){
returnawaitPromise.resolve('helloisjs');
}
constcallbackFunction=util.callbackify(fn);
callbackFunction((err,ret)=>{
if(err)throwerr;
console.log(ret);
});
//输出:helloisjs
util.debuglog(section)
说明:
util.debuglog()方法用于创建一个函数,基于NODE_DEBUG环境变量的存在与否有条件地写入调试信息到stderr。
如果section名称在环境变量的值中,则返回的函数类似于console.error()。否则,返回的函数是一个空操作。
section:一个字符串,指定要为应用的哪些部分创建debuglog函数。
demo:
constutil=require('util');
constdebuglog=util.debuglog('foo');
debuglog('hellofromfoo[%d]',123);
util.deprecate(function,string)
说明:
该方法会包装给定的function或类,并标记为废弃的。
demo:
constutil=require('util');
functionisBoolean(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:
constutil=require('util');
varformatString=util.format('%s%d%i%f%j','hello',1.123,123,2.1,"{'name':'xiao','age':'18'}");
console.log(formatString);
//e输出:hello1.1231232.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);
//输出:123
//如果只传入占位符而不传入参数,则原样返回
formatString=util.format('%%,%s');
console.log(formatString);
//输出:%%,%s
util.inherits(constructor,superConstructor)
说明:
注意,不建议使用util.inherits()。请使用ES6的class和extends关键词获得语言层面的继承支持。
从一个构造函数中继承原型方法到另一个。
constructor的prototype会被设置到一个从superConstructor创建的新对象上。
superConstructor可通过constructor.super_属性访问
demo:
constutil=require('util');
constEventEmitter=require('events');
functionMyStream(){
EventEmitter.call(this);
}
util.inherits(MyStream,EventEmitter);
MyStream.prototype.write=function(data){
this.emit('data',data);
};
conststream=newMyStream();
console.log(streaminstanceofEventEmitter);//true
console.log(MyStream.super_===EventEmitter);//true
stream.on('data',(data)=>{
console.log(`接收的数据:"${data}"`);
});
stream.write('运作良好!');//接收的数据:"运作良好!"
//建议使用ES6的class和extends:
constEventEmitter=require('events');
classMyStreamextendsEventEmitter{
write(data){
this.emit('data',data);
}
}
conststream=newMyStream();
stream.on('data',(data)=>{
console.log(`接收的数据:"${data}"`);
});
stream.write('使用ES6');
util.inspect(object[,options])
说明:
方法返回object的字符串表示,主要用于调试。
object:任何JavaScript原始值或对象
options:可用于改变格式化字符串的某些方面。
demo:
constutil=require('util');
constinspectOpt={
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:
constutil=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:
constutil=require('util');
classBox{
[util.inspect.custom](depth,options){
return"myInspect";
}
}
constbox=newBox();
console.log(util.inspect(box));
//输出:myInspect
util.inspect.defaultOptions
说明:
defaultOptions值允许对util.inspect使用的默认选项进行自定义。
它需被设为一个对象,包含一个或多个有效的util.inspect()选项。也支持直接设置选项的属性。
demo:
constutil=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.jserrorfirst回调风格的函数,回调函数是最后一个参数,返回一个返回值是一个promise版本的函数。
demo:
constutil=require('util');
constfs=require('fs');
conststat=util.promisify(fs.stat);
stat('.').then((stats)=>{
//Dosomethingwith`stats`
}).catch((error)=>{
//Handletheerror.
});
util.promisify.custom
说明:
使用util.promisify.custom符号可以自定义promisified功能。
demo:
constutil=require('util');
functiondoSomething(foo,callback){
//...
}
doSomething[util.promisify.custom]=function(foo){
returngetPromiseSomehow();
};
constpromisified=util.promisify(doSomething);
console.log(promisified===doSomething[util.promisify.custom]);
//输出:true
类:util.TextEncoder
说明:
该类用来对文本进行编码
textEncoder.encode([input])
说明:
对input字符串进行编码并返回一个Uint8Array包含编码字节的字符串
textEncoder.encoding
说明:
TextEncoder实例支持的编码。总是设置为'utf-8'。
demo:
constencoder=newTextEncoder();
constuint8array=encoder.encode('thisissomedata');
console.log(encoder.encoding)
//utf-8
类:util.TextDecoder
说明:
该类用来解析编码后的文本
newTextDecoder([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程序设计有所帮助。