1、使用控制台模块的基本输出
Node.js提供了一个console模块,它提供了大量非常有用的与命令行交互的方法。
它基本上与您在浏览器中找到的console对象相同。
最基本和最常用的方法是console.log(),它将传递给它的字符串打印到控制台。
如果你传递一个对象,它会将其呈现为字符串。
您可以向console.log传递多个变量,例如:
1. const x = 'x'; 2. const y = 'y'; 3. console.log(x, y);
我们还可以通过传递变量和格式说明符来格式化漂亮的短语。
1. console.log('My %s has %d ears', 'cat', 2); 2. // My cat has 2 ears
- %s 将变量格式化为字符串
- %d 将变量格式化为数字
- %i 仅将变量格式化为整数部分
- %o 将变量格式化为对象
示例:
console.log('%o', Number);
2、清除控制台
console.clear()清除控制台(行为可能取决于所使用的控制台)
3、计数元素
console.count()是一个方便的方法。
1. 使用以下代码: 2. const x = 1 3. const y = 2 4. const z = 3 5. console.count( 6. 'The value of x is ' + x + 7. ' and has been checked .. how many times?' 8. ) 9. console.count( 10. 'The value of x is ' + x + 11. ' and has been checked .. how many times?' 12. ) 13. console.count( 14. 'The value of y is ' + y + 15. ' and has been checked .. how many times?' 16. ) 17. // 打印结果: 18. // The value of x is 1 and has been checked .. how many times?: 1 19. // The value of x is 1 and has been checked .. how many times?: 2 20. // The value of y is 2 and has been checked .. how many times?: 1
console.count()会计算一个字符串被打印的次数,并在它旁边打印计数:
可以数一下苹果和橘子:
1. const oranges = ['orange', 'orange']; 2. const apples = ['just one apple']; 3. oranges.forEach(fruit => { 4. console.count(fruit); 5. }); 6. apples.forEach(fruit => { 7. console.count(fruit); 8. }); 9. // orange: 1 10. // orange: 2 11. // just one apple: 1
4、复位计数
控制台countReset()方法重置控制台使用的计数器。count()
1. const oranges = ['orange', 'orange']; 2. const apples = ['just one apple']; 3. oranges.forEach(fruit => { 4. console.count(fruit); 5. }); 6. apples.forEach(fruit => { 7. console.count(fruit); 8. }); 9. console.countReset('orange'); 10. oranges.forEach(fruit => { 11. console.count(fruit); 12. }); 13. // orange: 1 14. // orange: 2 15. // just one apple: 1 16. // orange: 1 17. // orange: 2
请注意对console.countReset('orange')的调用,重新将orange的计数重置为零。
5、打印堆栈跟踪
在某些情况下,打印函数的调用堆栈跟踪可能很有用,也许可以回答这样一个问题:您是如何到达代码的这一部分的?
你可以使用console.trace():
1. const function2 = () => console.trace(); 2. const function1 = () => function2(); 3. function1();
这将打印堆栈跟踪。如果我们在Node中尝试这个,会打印如下所示:
1. Trace 2. at function2 (file:///Users/repl.js:1:33) 3. at function1 (file:///Users/repl.js:2:25) 4. at file:///Users/repl.js:3:1 5. at ModuleJob.run (node:internal/modules/esm/module_job:198:25) 6. at async Promise.all (index 0) 7. at async ESMLoader.import (node:internal/modules/esm/loader:385:24) 8. at async loadESM (node:internal/process/esm_loader:88:5) 9. at async handleMainPromise (node:internal/modules/run_main:61:12)
6、计算花费的时间
您可以使用time()和timeEnd()轻松计算函数运行所需的时间
1. const doSomething = () => console.log('test'); 2. const measureDoingSomething = () => { 3. console.time('doSomething()'); 4. // do something, and measure the time it takes 5. doSomething(); 6. console.timeEnd('doSomething()'); 7. }; 8. measureDoingSomething();
打印如下:
1. test 2. doSomething(): 4.396ms
7、stdout和stderr
我们看到了console。日志非常适合在控制台中打印消息。这就是所谓的标准输出,或stdout。
console.error打印到stderr流。
它不会出现在控制台中,但会出现在错误日志中。
8、为输出着色
可以在控制台中为文本的输出着色,方法是使用转义序列,转义序列是标识颜色的一组字符。
转义序列可以参考(
https://gist.github.com/iamnewton/8754917)
你可以在Node.js REPL 中尝试一下,它将以黄色打印hi!。
但是,这是低级别的方法。为控制台输出着色的最简单方法是使用库。Chalk 就是这样一个库,除了着色之外,它还有助于其他样式工具,例如使文本加粗、斜体或下划线。
使用npm install chalk@4安装它,然后您可以使用它:
1. const chalk = require('chalk'); 2. console.log(chalk.yellow('hi!'));
使用chalk.yellow比试图记住转义码要方便得多,而且代码的可读性也更好。
9、创建进度条
Progress 是一个很棒的包,可以在控制台中创建进度条。使用npm install progress安装
此代码片段创建了一个10步进度条,每500ms完成一步。当条形图完成时,我们清除间隔:
1. const ProgressBar = require('progress'); 2. const bar = new ProgressBar(':bar', { total: 10 }); 3. const timer = setInterval(() => { 4. bar.tick(); 5. if (bar.complete) { 6. clearInterval(timer); 7. } 8. }, 500);