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程序设计有所帮助。