Node.js的HTTP与事件初步介绍&如何查看API(入门篇)
Node.js的HTTP与事件初步介绍&如何查看API(入门篇)
接着第一篇来说,当然,同样约定下面简称为Node(个人认为比较标准的说法),标题用node.js主要是为了方便阅读。同样,大牛可以略过这篇文章啦!现在,主要说3个问题:(1)接着第一篇介绍完Http其他部分(2)事件模型的介绍(3)如何查看API 文档.首先感谢下网友hellostory,修改下上一篇的程序的bug。?一、修改前一篇的程序bug ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?var http=require('http');var options = { hostname: 'translate.google.cn', port: 80, path: '/', method: 'POST'};var req=http.request(options,function(response){ var str=''; response.on('data',function(data){ str=str+data; }); response.on('end',function(){ console.log(str); });});req.on('error', function(e) { console.log('problem with request: ' + e.message);});req.end();?做一下简单的说明,response.on('data',function(data){});是不断的获取返回的数据,往str中添加;监听的'data'事件(在数据流中,暂时不做介绍)。response.on('end',function(){});是监听等待响应结束事件,这时,就可以取到完整的返回数据。因为,响应时,数据会分包发送。req对象监听error事件,是防止请求出错,方便打印错误信息,如果是写成REST API,那么这里可以做一个容错处理。这段代码很简单,但是没有说5个事件(实现接口的事件,暂且不说)、6个方法。因此,举几个特征明显的例子。req.write('name=vczero','utf8');//write(chunk, [encoding]),发送请求body的数据块。req.abort();//加上这句,会发现problem with request: socket hang up,他的作用是终止请求那么什么情况下,终止请求呢?比如:你要获取一个登陆的access_token,你的参数不合理。我们会采取中断请求。因此,可以注释这句代码。req.end('language=node','utf8');//end([data], [encoding])结束发送请求,如果没有发送body的任何部分,将会将数据刷到流中。如果指定了数据,该方法等同于在end()之后调用了write方法。req.setTimeout(1,function(){?//故意把时间设置很短,触发超时事件。??? console.log('请求超时!');});再来一个监听的例子:req.on('response',function(response){? ? console.log('headers:'+response.headers);//获取响应头});到这里,事件监听,似乎浮出水面了!!!那就是在对象(req)设置(on)监听事件('error'),然后触发事件,调用相应的回调函数。整段代码如下。
var eventEmitter=require('events').EventEmitter;/** 事件:事件就是对象自身执行的某种动作,事件有了,那么,我们还需要对象。* 因此,我们创建一个对象,继承于EventEmitter类。* */var util=require('util');//加载工具类模块,尽量使用Node的继承方式,避免js原型继承。var Upload=function(){ console.log('文件上传对象');};//util.inherits(constructor, superConstructor) 构造函数,超类(父类)构造函数util.inherits(Upload,eventEmitter);//通过util的inherits实现继承。var upload=new Upload();//设置事件监听upload.on('init',function(){ console.log('文件格式、字符集、大小判断....');});upload.on('checkOk',function(){ console.log('检测完毕....');});upload.on('over',function(){ console.log('上传成功....OK');});//触发事件upload.emit('init');upload.emit('checkOk');upload.emit('over');?我们可以在触发事件的时候判断,到哪一步了,触发什么事件。on设置事件监听,emit触发事件。结果是:
http.createServer(function(request,response){ //发现这里不知道怎么写}).listen(3000,'127.0.0.1');console.log('服务器启动:http://localhost:3000');?7、查看response对象