美文网首页
node系列之util

node系列之util

作者: 一溪酒 | 来源:发表于2016-12-24 18:58 被阅读39次

    地址

    传送门

    说明

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

    尚未抛弃的方法

    • 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的语法糖classextends
      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 }));
    

    即将弃用的方法

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

    小结

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

    相关文章

      网友评论

          本文标题:node系列之util

          本文链接:https://www.haomeiwen.com/subject/koglvttx.html