
3.3 Node.js的控制台console
利用好Node.js提供的console控制台和debug可以有效地辅助开发和定位bug。在Node.js中,console代表控制台,可以通过console对象的各种方法向控制台进行标准输出。
3.3.1 console对象下的各种方法
在REPL交互式运行环境中输入console,可以看到console对象下各种方法组成的一个数组,如图3.7所示。

图3.7 console对象的方法
3.3.2 console.log()方法
console.log()方法用于标准输出流的输出,也就是在控制台中显示一行信息,例如:

无论是在RPEL环境中运行这行代码还是作为Node.js文件执行这行代码,都可以看到控制台输出了“node.js is powerful”字样。
console.log()方法并没有对参数的个数进行限制,当传递多个参数时,控制台输出时将以空格分隔这些参数,例如:

运行之后,同样会在控制台输出“node.js is powerful”字样,这三个单词也依旧是以空格分隔开来的。
console.log()方法也可以利用占位符来定义输出的格式,如%d表示数字、%s表示字符串。
提示
如果需要对后面的多个参数都定义格式,就要逐个设置,并且输出时将不会再以空格分隔;如果没有预定义格式,就将正常输出。
示例如下代码:

在这一段代码中,需要注意的是当使用%d占位符后,如果对应的参数不是数字,控制台将会输出NaN。
3.3.3 console.info()、console.warn()和console.error()方法
console.info()、console.warn()以及console.error()的使用方法和console.log()一致,将3.3.2小节的代码换成console.info()、console.warn()、console.error()方法,将得到同样的结果:

3.3.4 console.dir()方法
console.dir()方法用于将一个对象的信息输出到控制台。如下代码将定义一个简单的对象。
【示例3-5】

在RPEL交互运行环境中运行这段代码,可以看到控制台输出了这个对象的信息,如图3.8所示。

图3.8 console.dir()方法输出对象信息
3.3.5 console.time()和console.timeEnd()方法
console.time()和console.timeEnd()方法主要用于统计一段代码运行的时间。console.time()方法置于代码起始处,console.timeEnd()方法置于代码结尾处。只需要向这两个方法传递同一个参数,就可以看到在控制台中输入了以毫秒计的代码运行时间。如下代码统计了两个循环执行后的时间以及各个循环分别使用的时间。
【示例3-6】

将这段代码保存为名为time.js的文件。利用node time命令运行这个文件,可以在控制台看到各个循环的使用时间统计,如图3.9所示。

图3.9 各个循环使用的时间统计
3.3.6 console.trace()方法
console.trace()用于输出当前位置的栈信息,可以向console.trace()方法传递任意字符串作为标志,类似于console.time()中的参数。在RPEL交互运行环境中执行以下代码:

可以看到此处的栈信息已经在控制台中输出,如图3.10所示。

图3.10 console.trace()输出栈信息