深入学习Node之前,需要先知道Node这个框架的基本知识.

控制台

console对象:Node中使用该对象表示控制台,通过console对象各种方法来向控制台进行标准输出流,标准错误输出流.

API

  • console.log(): 进行标准输出流的输出(stdout)
// a.js
console.log('hello node');//hello node
console.log('%s',"js","node"); // 'js' 'node'
console.log('%s','people',{name:'kb',age:20}); //people { name: 'kb', age: 20 }
console.log('%d',1,2,3); //1 2 3
console.log('%%',10);//% 10
  • console.error(): 进行标准错误流的输出
    用法与console.log()一样.

  • console.dir(): 查看一个对象的内容,并把对象信息输出到控制台.

// a.js
var person = {
  age: 38,
  name: 'kobe',
  job: function(){
    return 'player'
  }
};
console.log(person);
// node a.js
{ age: 38, name: 'kobe', job: [Function: job] }
  • console.time()与console.timeEnd() : 可以用来统计一段代码的执行时间
// a.js
console.time('loop');
for(var i =0;i < 10000;i++){
  ;
}
console.timeEnd('loop');
// node a.js
loop: 0.283ms
  • console.trace(): 把当前位置的栈信息当做标准错误信息输出
// 在之前的a.js加入这么一个代码
console.trace('loop');
// node a.js
Trace: loop
    at Object.<anonymous> (D:\study\a.js:6:9)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3
  • console.assert(): 对一个表达式结果进行评估,结果为false,输出一个消息字符串并且抛出AssertionError异常.

Node的全局作用域

Node中存在一个全局作用域,定义了不需要加载任何模块就可以使用的变量,函数,类.

// 查看global对象的内容
console.log(global);
  • 定时器函数
    Node里面定义的定时器全局函数与浏览器端的定时器函数类型.
1. setTimeout(cb,ms,[arg],[..]) : //过了多少ms执行某个回调
2. clearTimeout(timer) // 取消setTimeout回调
3. setInterval(cb,ms,[arg],[..]): //每隔多少ms执行某个回调
4. clearInterval(timer) // 取消setInterval回调
5. timer(定时器对象).unref(): //取消setTimeout/setInterval回调
6. timer.ref(): //恢复回调函数的使用
  • require
1. require(): // 加载模块
2. require.resolve('./a.js') // 'D:\\study\\a.js' 查看(不加载)某个模块文件的带完整绝对路径的文件名
3. require.cache对象 //该对象表示缓存了所有已经被加载的模块的缓存区
4. delete 可以删除缓存区某个模块变量对象
  • _ _filename与 __dirname
console.log(__filename); //D:\study\b.js 该变量表示当前模块文件的完整绝对路径的文件名
console.log(__dirname); //D:\study 该变量表示当前模块文件所在目录的完整绝对路径
  • 事件处理机制/事件环机制
    event模块定义了一个EventEmitter类,所有可能触发事件的对象都是继承了EventEmitter类的子类的实例对象.EventEmitter类定义了很多方法处理事件.
addListener(event,listener) // 对指定的事件绑定事件处理函数
on(event,listener) // 对指定的事件绑定事件处理函数(addListener的别名),可以对同一事件绑定不同事件处理函数
once(event,listener) // 对指定事件只执行一次绑定的事件处理函数
removeListener(event,listener) // 对指定事件解除事件处理函数
removeAllListener([event]) // 对指定事件解除所有事件处理函数
listeners(event) // 获取指定事件的所有事件处理函数
emit(event,[args],[..]) // 手工触发指定事件
setMaxListeners(n) // 指定事件处理函数的最大数量,默认对同一事件最大绑定10个事件处理函数.
EventEmitter.listenCount(emitter,event) // 获取某个对象的指定事件的事件处理函数数量

Node的调试器

1. 在命令行输入 node debug <被执行的脚本文件名>// 启动调试器
2. 启动后,输入cont/c  // 继续执行余下的代码
3. 输入next/n // 执行下一句代码
4. 输入step/s // 进入函数内部
5. 输入out/o //立即执行完函数内部剩余代码
6. setBreakpoint/sb([filename默认为当前运行脚步] , line) //设置断点
7. clearBreakpoint/cb([filename],line) // 取消断点
8. 在调试过程输入repl  // 进入REPL环境
9. restart // 重新开始脚步调试
10. kill  // 终止脚本调试
11. list(n) // 查看当前所执行代码之前/之后的n行代码
12. backtrace/bt  // 查看函数/外层各函数的返回位置,包括返回代码的行号,起始字符的所在位置
13. run // 重新开始脚步调试
14. scripts // 查看当前运行的文件,及所有被加载的模块文件名. 
15. version // 显示V8引擎版本号