全局对象
global
全局变量
process
console
常用工具util
util.inherits
函数只会继承原型中定义的方法,不会继承构造函数中的方法和属性。
util.inherits(constructor, superConstructor);
1 | var util = require('util'); |
Sub仅继承了Base在原型中定义的函数,而构造函数内部的base属性和sayHello函数没有被Sub继承。
util.inspect
将任意对象转换为字符串的方法,至少接受一个参数。
util.inspect(object, [showHidden], [depth], [colors])
- object,要转换的对象。
- showHidden: 若为true,将输出更多隐藏信息。
- depth 表示最大递归层数,如不指定默认为2层。
- color 值若为true,将以ANSI颜色编码,通常用于终端显示更漂亮。
util.inspect并不会直接把对象转换为字符串,即使该对象定义了toString()方法也不会调用。
util.isArray()/util.isRegExp()/util.isDate()/util.isError()
util.format()/util.debug()
事件驱动 events
events是Node.js最重要的模块,没有之一。
事件发射器
events模块只提供了一个对象:events.EventEmitter。EventEmitter的核心就是事件发射与事件监听器功能的封装。
- EventEmitter.on(event, listener)为指定事件注册一个监听器。接受一个字符串event和一个回调函数listener。
- EventEmitter.emit(event, [arg1],[arg2],[…])发射event事件,传递若干参数到事件监听器的参数表。
- EventEmitter.once(event), listener)为指定事件注册一个单次监听器。最多只触发一次,触发后立即解除该监听器。
- EventEmitter.remove(event, listener)移除指定事件的某个监听器,listener必须是该事件已经注册过的监听器。
- EventEmitter.removeAllListeners([event])移除所有事件的所有监听器。
error事件,为发射error事件的对象设置监听器,避免遇到错误后整个程序崩溃。
文件系统fs
fs模块是文件操作的封装,提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX文件操作系统。fs模块中所有的操作都提供了异步和同步版本。
fs.readFile
fs.readFile(filename,[encoding],[callback(err,data)])
接受一个必选参数filename,表示要读取的文件名。第二个参数encoding是可选的,表示字符编码。callbakck是回调函数,用于接收文件的内容。
fs.readFileSync同步读取
如果有错误发生,需要使用try catch捕捉异常。
fs.open
fs.open(path, flags, [mode], [callback(err, fd)])是POSIX open函数的封装。
接受两个必选参数:path 为文件路径, flag指定相应模式。
mode参数用于创建文件时给文件指定权限。回调函数将会传递一个文件描述符fd。
fs.read
fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])
fs.read从指定的文件描述符fd中读取数据并写入buffer指向的缓冲区对象。offset是buffer的写入偏移量。length是要从文件中读取的字节数。position是文件读取的起始位置,如果position的值为null,则会从文件指针的位置读取。回调函数传递bytesRead和buffer,分别表示读取的字节数和缓冲区对象。
HTTP服务器与客户端
HTTP服务器
http.server是http模块中的HTTP服务器对象,用Node.js做的所有基于HTTP协议的系统,都是基于http.Server实现的。
http.Server事件
http.Server是一个基于事件的HTTP服务器,继承自EventEmitter,提供了以下几个事件:
- request: 当客户端请求到来时,该事件触发,提供两个参数req和res,分别是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息。
- connection: 当TCP连接建立时,该事件被触发,提供一个参数socket,为net.Socket的实例。
- close: 当服务器关闭时,该事件被触发,注意不是在用户连接断开时。
最常用的是request,http提供了一个捷径: http.createServer([requestListener])–创建一个HTTP服务器并将requestListener作为request事件的监听函数。
1 | var http = require('http'); |
获取GET请求
获取POST请求
http.ServerResponse
返回给客户端的信息。
http.ServerResponse有三个重要的成员函数,用于返回响应头、响应内容以及结束请求。
- response.writeHead(statusCode, [headers]): 向请求的客户端发送响应头。 statusCode是HTTP状态码。headers是一个类似关联数组的对象,表示响应头的每个属性。该函数在一个请求内最多只能调用一次,如果不调用,则会自动生成一个响应头。
- response.write(data, [encoding]): 向请求的客户端发送响应内容。data是一个Buffer或字符串,表示要发送的内容。如果data是字符串,那么需要指定encoding来说明它的编码方式,默认是utf-8。
- response.end(data, [encoding]): 结束响应。当所用要返回的内容发送完毕后,该函数必须被调用一次。接受两个可选参数,意义和response.write相同。如果不调用该函数,客户端永远处于等待状态。
HTTP客户端
http模块提供了两个函数http.request和http.get,功能是作为客户端向HTTP服务器发起请求。
- http.request(options, callback): 发起HTTP请求。接受两个参数,option是一个类似关联数组的对象,表示请求的参数, callback是请求回调函数,传递一个参数,为http.ClientResponse的实例。
http.request返回一个http.ClientRequest的实例。
option常用参数如下:
host :请求网站的域名或 IP 地址。
port :请求网站的端口,默认 80。
method :请求方法,默认是 GET。
path :请求的相对于根的路径,默认是“/”。QueryString 应该包含在其中。例如 /search?query=byvoid。
headers :一个关联数组对象,为请求头的内容。
1 | var http = require('http'); |
- http.get(options, callback): http模块提供了一个简单的方法用于处理GET请求:http.get。它是http.request的简化版,唯一区别在于http.get自动将请求方法设为了GET请求,同时不需要手动调用req.end()。
1 | var http = require('http'); |
- http.ClientRequest是由http.request或http.get返回产生的对象,表示一个已经产生且正在进行中的HTTP请求。提供一个response事件,即http.request或http.get第二个参数指定的回调函数的绑定对象。
http.ClientRequest像http.ServerResponse一样也提供了write和end函数,用于向服务器发送请求体。通常用于POST、PUT等操作。所有写结束后必须调用end函数以通知服务器,否则请求无效。
1 request.abort():终止正在发送的请求
2 request.setTimeout(timeout, [callback]):设置请求超时时间,timeout为毫秒数。当请求超时以后,callback将会被调用。
1 | var http = require('http'); |
- http.ClientResponse与http.ServerRequest相似,提供了三个事件:data、end和close,分别在数据到达、传输结束和连接结束时触发。其中data事件传递一个参数chunk,表示接收到的数据。
http.ClientResponse还提供了以下几个特殊的函数:
1 response.setEncoding([encoding]):设置默认的编码,当data事件被触发时,数据将会以encoding编码。默认值是null,即不编码,以buffer的形式存储。
2 response.pause():暂停接受数据和发送事件,方便实现下载功能。
3 response.resume():从暂停的状态中恢复。