Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端
一: 全局对象
Node.js中的全局对象是global,所有的全局变量(除了global本身以外)都是global的属性。
global 最根本的作用是作为全局变量的宿主。
全局变量的条件:
(1)在最外层定义的变量;
(2)全局对象的属性;
(3)隐式定义的变量(未定义直接赋值的变量(strict模式下不可以))
在Node.js中不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。
一.1 process
process是一个全局变量,即global对象的属性,它用于描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口。
(1)process.argv是命令行参数数组,第一个元素是node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数。
(2)process.stdout 是标准输出流,console.log()向标准输出打印字符,而process.stdout.write()函数提供了更底层的接口。
(3)process.stdin是标准输入流,初始时它是被暂停的,要想从标准输入读取数据,必须恢复流,并手动编写流的事件响应函数。
process.stdin.resume();
process.stdin.on('data',function(data) {
process.stdout.write('read from console: ' + data.toString() );
});
(4)process.nextTick(callback)的功能是为事件循环设置一项任务,Node.js会在下次事件循环调响应时调用callback。
注:不要使用setTimeout(fn,0)代替process.nextTick(callback),前者比后者效率要低得多。
process的API参考: http://nodejs.org/api/process.html
一.2 console (所谓的各种流:跟操作系统的设置有关,有时候操作系统会把程序的错误输出和正常输出放到不同的地方,比如不同的日志文件,不同的终端设备)
console用于提供控制台标准输出,用于向标准输出流(stdout)或标准错误流(stderr)输出字符。
(1)console.log接受若干个参数,如果只有一个参数,则输出这个参数的字符串形式;如果有多个参数,则以类似于C语言的printf()命令的格式输出。
(2)console.error():与console.log用法一致,只是向标准错误流输出。
(3)console.trace(): 向标准错误流输出当前的调用栈。
二:常用工具util
util是Node.js的核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能过于精简的不足。
二.1 util.inherits
util.inherits(constructor:构造函数, superConstructor:父级的构造函数)是一个实现对象间原型继承的函数。JavaScript的面向对象是基于原型的。
util.inherits方法相当于原生js中的组合继承。子级只能继承父级在原型中定义的函数,构造函数中的属性都是私有的,不被继承。
二.2 util.inspect
util.inspect(object, [showHidden] , [depth], [colors])是一个将任意对象转换为字符串的方法,通常用于调试和错误输出。至少接受一个参数,object。
showHidden : 可选参数,如果为true,则会输出更多隐藏信息。默认为false.
depth : 最大递归层数,如果对象很复杂,可以指定层数以控制输出信息的多少,默认为2层,设为null,则表示不限递归层数完整遍历对象。
color :若为true,则输出格式将会以ANSI颜色编码,通常用于在终端显示更漂亮的效果。默认为false,显示普通颜色。
customInspect : 如果为false,则inspect(depth,opt)不会被执行,默认为true。
注: util.inspect并不会简单地直接把对象转换为字符串,即使该对象定义了toString方法也不会调用。