node系列之util

2016-12-24  本文已影响39人  一溪酒

地址

传送门

说明

nodejs的一些工具类,不过从文档来看,好多都已经作废了,很多判断数据类型的方法已经迁移交由该数据类型自己来判断。比如 util.isArray(object)方法即将弃用,取而代之的是Array.isArray(object)。同样的例子还有很多,isBooleanisNumber等等。

尚未抛弃的方法

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

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来提示调用方。

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的例子,看起来会简介一些。

console.log(util.inspect(util, { showHidden: true, depth: null }));

即将弃用的方法

我就不说了,既然官方都不推荐了,那就随风消去吧。

小结

这个模块我用得不多,主要是继承会偶尔用上。

上一篇下一篇

猜你喜欢

热点阅读