当我们在Chrome浏览器的控制台输出concole.log()时候,控制台会将相应的对象漂亮地展示出来,如果你点击箭头,还会展示多层级的对象,如下图:
那么在Node.js中会怎么样呢?
Node.js中的console模块
Node.js 提供了console模块,该模块提供了大量非常有用的与命令行交互的方法。
它基本上与浏览器中的 console 对象相同。
最基础、最常用的方法是 console.log(),该方法会打印传入到控制台的字符串。
const x = 1;
const y = "1234";
console.log(x, y);
同样的,也可以通过传入变量和格式说明符来格式化用语。
- %s 会格式化变量为字符串
- %d 会格式化变量为数字
- %i 会格式化变量为其整数部分
- %o 会格式化变量为对象
console.log("今年是%d年!", 2021);
stdout 和 stderr
stdout是标准输出流。console.log() 方法就是在控制台中打印消息,将信息打印到stdout流。
console.error() 方法会将信息打印到stderr流,它不会出现在控制台,但会出现在错误日志中。
清空控制台
console.clear() 方法会清除控制台。
元素计数
console.count()方法会对打印的字符串的次数进行计数,并在其旁边打印计数:
const x = 2021;
console.count(x);
console.count(x);
console.count(x);
打印堆栈信息
在开发过程中,我们有时候会通过打印堆栈信息来查看程序运行到哪一步?是怎样运行到这一步的?这里就需要console.trace()方法了。
console.trace()方法会打印堆栈信息。
const foo = () => console.trace()
const doo = () => foo()
doo();
进度条
控制台输出,有时候需要用到进度条,比如下载、解压缩文件等等。
console模块不支持进度条功能,但是progress包可以完美的支持。
安装progress包:
npm install progress -save-dev
进度条代码逻辑:
var ProgressBar = require('progress');
var https = require('https');
var req = https.request({
host: 'download.github.com',
port: 443,
path: '/visionmedia-node-jscoverage-0d4608a.zip'
});
req.on('response', function(res){
var len = parseInt(res.headers['content-length'], 10);
console.log();
var bar = new ProgressBar(' downloading [:bar] :rate/bps :percent :etas', {
complete: '=',
incomplete: ' ',
width: 20,
total: len
});
res.on('data', function (chunk) {
bar.tick(chunk.length);
});
res.on('end', function () {
console.log('\n');
});
});
req.end();
执行结果如下图:
Node.js控制台输出对象
说回开始时候的打印对象问题。
首先,我们用开始时候同样的代码,放在node.js执行,结果如下:
如上图,内嵌对象只打印出来2层,之后的就是用 [Object] 代替了!如果我们想打印完整对象怎么办呢?
继续,使用格式化方式打印。
console.log("%o", a);
结果如下:
这次好像好点了,多了几层,打印到了4层,一般的嵌套对象应该够了。那如果要完全打印出来呢?
这里用JSON模块,我们将对象转换成json串打印出来。
console.log(JSON.stringify(a));
结果如下:
呃,完整到是完整了,但看起来不好看。
格式化下看看。
// 其中 2 是用于缩进的空格数
console.log(JSON.stringify(a, null, 2));
结果如图:
完整的对象出来了,感觉没有Chrome浏览器可以折叠得好看好用,但比着打印不全好太多了!
本文暂时没有评论,来添加一个吧(●'◡'●)