node学习日志(二)

时间:2021-11-25 03:34:29

比来看《node即学即用》,做点条记~~

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数据】