debuglog(section)

很有用的调试方法。可以通过 util.debuglog(name) 来创建一个调试fn,这个fn的特点是,只有在运行程序时候,声明环境变量NODE_DEBUG=name,才会打印出调试信息。

可以看下面的例子,直接运行 node debuglog.js,没有任何输出。需要NODE_DEBUG=foo,才会有打印信息.

var util = require('util');
var logger = util.debuglog('foo'); logger('hello');

如下所示,注意,6347 是当前进程id。

➜  2016.12.02-util git:(master) ✗ NODE_DEBUG=foo node debuglog.js
FOO 6347: hello world

此外,还可以一次指定多个name,通过逗号分隔。

var util = require('util');
var firstLogger = util.debuglog('first');
var secondLogger = util.debuglog('second');
var thirdLogger = util.debuglog('third'); firstLogger('hello');
secondLogger('hello');
thirdLogger('hello');

运行如下:

FOO 6347: hello world
➜ 2016.12.02-util git:(master) ✗ NODE_DEBUG=first,second node debuglog.js
FIRST 6456: hello
SECOND 6456: hello

将方法标识为作废:util.deprecate(fn, str)

fn包裹一层,并返回一个新的函数fn2。调用fn2时,同样完成fn原有的功能,但同时会打印出错误日志,提示方法已作废,具体的提示信息就是第二个参数str

var util = require('util');
var foo = function(){
console.log('foo');
}; var foo2 = util.deprecate(foo, 'foo is deprecate'); foo2(); // 输出如下:
// foo
// (node:6608) DeprecationWarning: foo is deprecate

如果嫌错误提示信息烦人,可以通过--no-deprecation参数禁掉,可以参考这里

➜  2016.12.02-util git:(master) ✗ node --no-deprecation deprecate.js
foo

格式化打印:util.format(format[, ...args])

格式化打印大家应该比较熟悉了,基本每种语言里都有自己的实现,直接上例子。

var util = require('util');

console.log( util.format('hello %s', 'world') );
// 输出:hello world console.log( util.format('1 + 1 = %d', 2) );
// 输出:1 + 1 = 2 console.log( util.format('info: %j', {nick: 'chyingp'}) );
// 输出:info: {"nick":"chyingp"} console.log( util.format('%s is %d age old', 'chyingp') );
// 输出:chyingp is %d age old console.log( util.format('%s is a man', 'chyingp', 'indeed') );
// 输出:chyingp is a man indeed

调试方法:util.inspect(obj[, options])

非常实用的一个方法,参数说明如下:

  • obj:js原始值,或者对象。
  • options:配置参数,包含下面选项
    • showHidden:如果是true的话,obj的非枚举属性也会被展示出来。默认是false。
    • depth:如果obj是对象,那么,depth限制对象递归展示的层级,这对可读性有一定的好处,默认是2。如果设置为null,则不做限制。
    • colors:自定义配色方案。
    • showProxy:
    • maxArrayLength:如果obj是数组,那么限制最大可展示的数组个数。默认是100,如果设置为null,则不做限制。如果设置为0或负数,则一个都不展示。
var util = require('util');

var obj = {};

Object.defineProperty(obj, 'nick', {
enumerable: false,
value: 'chyingp'
}); console.log( util.inspect(obj) );
// 输出:{} console.log( util.inspect(obj, {showHidden: true}) );
// 输出:{ [nick]: 'chyingp' }

NodeJS学习笔记 (27)实用工具模块-util(ok)的更多相关文章

  1. NodeJS学习笔记之Connect中间件模块(一)

    NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...

  2. Nodejs学习笔记(三)--- 模块

    目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...

  3. Nodejs学习笔记(三)—模块

    简介及资料 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名') ...

  4. 【转】Nodejs学习笔记(二)--- 模块

    目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...

  5. nodejs学习笔记之包、模块实现

        简单了解了node的安装和一些基本的常识之后,今天学习了node中很重要的包和模块的一些知识点.       首先学习一下包的规范,它由包结构和包描述两部分组成.包结构用于组织包的各种文件,包 ...

  6. NodeJS学习笔记之Connect中间件模块(二)

    一,开篇分析 大家好,今天这篇文章主要是对"Connect"中间件以及相关辅助中间件,做一个源码分析系列,我想上一篇文章大家也看了, 介绍了使用方式及用途,而这篇也是出于本人的兴趣 ...

  7. NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇

    个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...

  8. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  9. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

随机推荐

  1. IMP-00010: 不是有效的导出文件,标题验证失败

    IMP-00010: 不是有效的导出文件,标题验证失败 IMP-00000: 未成功终止导入   在google上查找了一下,大概有两种情况: 1.imp/exp的版本不对,也就是说低版本的导出,可以 ...

  2. ES6 | 关于class类 继承总结

    子类必须在constructor方法中调用super方法,否则新建实例时会报错.这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工.如果不调用super方法,子类就得不到 ...

  3. 转:EL表达式

    简介: EL 全名为 Language ,JSP2.0 之后,EL 成为了标准规范.因此,只要是支持Servlet2.4/JSP2.0 的容器,就都可以在JSP 网页中直接使用EL . 除了JSP2. ...

  4. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  5. GDOI2016酱油记(补发)

    这篇酱油记是前年发在MCHacker一个叫code-hub的博客上的(已崩),现在来补发一下... GDOI2016扯淡(爆零记) 大家好,我是巨弱DCDCBigBig,在五一期间和一群神牛去考GDO ...

  6. MFC基础知识

    1.句柄:具有内存后,系统返回的标识符 2.消息:相当于事件,例如鼠标点击就是一个消息 3.消息队列:就是将事件按照时间的先后顺序在一个队列中 4.消息处理机制:首先操作系统拿到消息,然后将消息放到消 ...

  7. java 导出百万数据到excel

    @RequestMapping("export") public void write(HttpServletRequest request,HttpServletResponse ...

  8. jquery复制到剪贴板

    <!DOCTYPE html> <html> <head> <title>ZeroClipboard Test</title> <me ...

  9. 紫书 习题 11-15 UVa 1668 (图论构造法)

    参考了http://www.bubuko.com/infodetail-1276416.html 首先是逆向思维, 向把每条边看作一条路径, 然后再去合并 然后我们讨论怎么样合并时最优的 我们讨论当前 ...

  10. docker环境下mysql参数修改

    原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...