比来看《node即学即用》,做点条记~~
一、核心API
1.【Events】
**浏览器中的事件模型是从DOM中来的
**DOM是基于用户交互的用户驱动型事件模型,有着一组与树状布局对应的接口元素
**当用户与接口的某个特定部分交互时,对应有一个事件和一个相关的东西
**操纵东西是在一棵树上,,故模型包罗了冒泡和捕获的观点,即可以沿着树向上或向下的元素也接收到被触发的事件
**javascript的事件模型没有树状布局,故更为简洁
【EventEmitter】供给根本的事件成果
【on要领】监听事件
1 server.on(‘event‘,function(a,b,c){ 2 //具体操纵 3 });
【创建一个新类撑持EventEmitter事件】
var utils=requires(‘utils‘);//引入utils模块,可以挪用inherits要领 var EventEmitter=require(‘events‘).EventEmitter; var Server=function(){ console.log(‘init‘); }; //把EventEmitter类的要领添加到创建的Server类中 //所有的Server新实例都可以使用EventEmitter要领 utils.inherits(Server,EventEmitter); var s=new Sever(); s.on(‘abc‘,function(){ console.log(‘abc‘); });
【emit要领】触发一个事件
1 s.emit(‘abc‘)
**这些事件是针对某个东西的,不存在全局的事件
【Callback道理】
1.触发事件时通报参数
1 s.emit(‘abc‘,a,b,c); 2 3 http.emit(‘request‘,req,res);
2.触发器中如何挪用事件
1 if(arguments.length<=3){ 2 //速度快 3 handler.call(this,arguments[1],arguments[2]); 4 }else{ 5 //速度慢 6 var args=Array.prototype.slice.call(arguments,1); 7 handler.apply(this,args); 8 } 9
**参数少时,直接用call要领;参数多时,用apply要领,用数组来通报参数
**用到了this--->事件监听器被挪用时在EventEmitter的上下文中,而不是本来的位置
2.【HTTP】
【HTTP处事器】
**创建简单HTTP处事器
1 var http=require(‘http‘); 2 var server=http.createServer(); 3 var handleReq=function(req,res){ 4 res.writeHead(200,{}); 5 res.end(‘hello world!‘); 6 }; 7 server.on(‘request‘,handleReq); 8 server.listen(8125);
**HTTP的事件们:
【request】有新的HTTP请求
【checkContinue】客户端以数据流方法将数据发送给处事器时挪用,查抄当前状态下是否继续;
如果这个事件绑定了事件触发器,request请求就不会被触发
【upgrade】客户端请求协议升级时会触发,除非绑定了此事件的事件措置惩罚惩罚器,否则http处事器将拒绝请求
【clientError】把客户端发送的error事件通报出来
【Connection】为请求创建一个新的TCP流时触发,事件会把TCP流作为参数传给该请求
该数据流也可以在request使用的时候,通过request.connection变量获得
但每个流只会触发connection事件一次--->可能会呈现从一个客户端来多个请求只对应一次connection事件
【close】客户端TCP的*
【HTTP客户端】
【提交HTTP GET请求】
1 var http=require(‘http‘); 2 3 var opts={ 4 host:‘‘, 5 port:80, 6 path:‘/‘ 7 }; 8 9 var req=http.get(opts,function(){ 10 console.log(res); 11 res.setEncoding(‘utf8‘);//设置编码 12 res.on(‘data‘,function(data){ 13 console.log(data); //得到Buffer东西的裸数据 14 }); 15 });
【发送HTTP POST和PUT数据】