node核心API
Events
- DOM是基于用户交互的用户驱动事件模型,有与树状结构(HTML)对应的接口元素,操作对象有父节点也有可能有子节点,因此这种模型具有冒泡和捕获的概念,允许沿着树结构向上或者向下的元素也接受触发事件,由于JavaScript中没有这种树状结构,这就是Node中事件模型与浏览器中的事件模型之间的区别
- EventEmitter
- 提供了on和emit两种方法可以供其他类使用
- on为一个事件创建了监听器,监听相关的事件
- emit产生相关的事件触发事件监听器,这种事件只针对某个实例,不存在全局的事件,同一实例的不同对象之间也不会共享事件
- 回调函数语法
- 如果传给emit()的参数数目小于3个(包含事件名称),那么调用的速度更快
- 如果想要在事件回调函数中使用this变量的话,就必须将它作为一个参数传入并赋值到另外一个变量中
HTTP
构建新的HTTPServer类使用http.createServer()
- http服务器:使用HTTP服务器的第一步是调用http.createServer()创建一个Server类的实例,这个类中有6个事件和三个方法
- connection和close事件表示了与客户端的TCP连接的建立与关闭
- request、checkContinue、upgrade、clientError事件与HTTP请求相关联。request表示新的HTTP请求。checkContinue在客户端以数据流的方式将数据发送给服务器的时候可以对HTTP请求进行直接的控制,用来检查当前状态能否继续发送。clientError用来传递客户端的error事件
- http客户端:用来对远程服务器发起连接
- 配置(options)提供host(可以是IP地址)port和path,方法默认是GET
- 调用http.request(options, function)创建客户端请求实例,其中回调函数中可以监听response事件,可以使用监听器订阅response的某一事件
- 最后需要使用req.end()来结束该请求
- 使用http.get()得到的是Buffer对象的裸数据,可以在回调函数中使用request.setEncoding(‘utf8’)来讲获得的数据转换为utf8格式的数据
- 发送数据:在options中将method设置为’POST’,在回调函数中使用response.setEncoding(‘utf8’)进行设置,在外部使用req.write()发送字符串格式的数据,使用req.end()结束数据发送。服务器在收到req.end()之前不会响应数据请求
- URL:有三个方法:parse、format和resolve
- 使用require(‘url’)将URL模块包含进来
- 使用parse方法对URL进行解析得到:
- href:完整的url
- protocol:URL协议
- host是完整的hostname
- pathname是文件路径
- search部分为URL中的http GET参数
- querystring:处理query字符串的辅助模块
- 使用require(‘querystring’)将模块包含进来
- 使用parse方法将query字符串转变为一个对象,其中有关键字和变量值其中数字是返回成字符串的
- 传给parse方法的query字符串中不能包含URL中标记的?
- 使用encode方法将输入的key-value格式的对象转换成为query字符串的格式但是如果属性的值不是字符串、布尔值、数字中的一种,那么无法进行序列化
I/O
- 数据流
- 所有的数据流都是EventEmitter的实例,可以主动触发事件
- 可读的数据流
- 触发data事件
- 使用数据池模式来处理数据流,在接收到end事件之后对整体数据进行处理
- 可写的数据流
- 可读写的数据流
- 文件系统
- 通常使用异步的方法,但是如果在删除(unlink)之后读取文件,会出现错误。将删除文件内嵌在异步函数之中来保证次序
var fs = require('fs');
fs.readFile(filename, function(error, data){fs.unlink(filename);})
- buffer
- new Buffer(‘string’, ‘encoding method’)