地址
说明
nodejs的一些工具类,不过从文档来看,好多都已经作废了,很多判断数据类型的方法已经迁移交由该数据类型自己来判断。比如 util.isArray(object)
方法即将弃用,取而代之的是Array.isArray(object)
。同样的例子还有很多,isBoolean
、isNumber
等等。
尚未抛弃的方法
- util.debuglog(section)
类似于debug
模块的做法。
const util = require('util');
const debuglog = util.debuglog('foo');
debuglog('hello from foo [%d]', 123);
运行的时候要指定环境变量NODE_DEBUG=foo
FOO 3245: hello from foo [123]
3245是当前进程id。如果有需要,可以指定多个值(用逗号隔开)。NODE_DEBUG=fs,net,tls
。
- util.deprecate
封装了一个方法,并且还会有相应的提示。一般都是提示不要使用此方法等等。
var func = util.deprecate(function() {
for (var i = 0, len = arguments.length; i < len; ++i) {
process.stdout.write(arguments[i] + '\n');
}
}, 'util.puts: Use console.log instead');
当调用func方法的时候,会提示你是用console.log
来替换。
在你设计的api里,假如有部分需要平滑过渡的话,可以使用这个 deprecate
来提示调用方。
-
util.format
格式化。返回一个格式化后的字符串 -
util.inherits(constructor, superConstructor)
这个用得可能相对来说会多一点:继承。
官方貌似比较推荐的是es2015的语法糖class
和extends
。
util.inherits
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(`Received data: "${data}"`);
});
stream.write('It works!'); // Received data: "It works!"
es2015
const util = require('util');
const EventEmitter = require('events');
class MyStream extends EventEmitter {
constructor() {
super();
}
write(data) {
this.emit('data', data);
}
}
const stream = new MyStream();
stream.on('data', (data) => {
console.log(`Received data: "${data}"`);
});
stream.write('With ES6');
可以看出,两种效果其实是一样的。而且,es2016的例子,看起来会简介一些。
- util.inspect(object[, options])
将一个对象转换成字符串,通常用于调试和错误输出(我没有用过这个方法。。。)。有兴趣开始简单地使用这个方法输出一下。
console.log(util.inspect(util, { showHidden: true, depth: null }));
即将弃用的方法
我就不说了,既然官方都不推荐了,那就随风消去吧。
小结
这个模块我用得不多,主要是继承会偶尔用上。
网友评论