nodejs之HTTP模块学习
Posted Sturrbon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs之HTTP模块学习相关的知识,希望对你有一定的参考价值。
nodejs中的http模块封装了一个http服务器模块和一个简易的http客户端。
http.Server是一个基于事件的http服务器
http.request是http客户端工具,用于向http服务器发起请求
而http.createServer方法中的函数参数req和res分别代表请求对象和响应对象。
req是http.incomingMessage的实例
res是http.ServerResponse的实例
一、http服务器
1).http.Server
http.Server是一个基于事件的服务器,继承自EventEmitter,提供如下事件:
request:当客户端请求到来时,该事件被触发,提供两个参数res和req,表示响应信息和请求信息,是最常用的事件
connection:当TCP连接建立时,该事件被触发,提供一个socket参数,是net.Socket的实例
close:当服务器关闭时,触发事件
2).http.incomingMessage
是HTTP请求的信息,一般由http.Server的request事件发送,并作为第一个参数传递,http请求一般可以分为两部分:请求头和请求体,并提供如下三个事件
1.data:当请求体数据到来时,该事件被触发,提供一个参数chunk,表示接受的数据,如果该事件没有被监听,则请求体会被抛弃,该事件有可能会被多次调用
2.end:当请求体数据传输完毕时,该事件会被触发,,此后不会再有数据
3.close:当用户请求结束时,该事件被触发,不同于end,如果强制终止传输,也会触发close
3).http.ServerResponse
是返回给客户端的信息,决定了用户最终看到的信息,一般由http.Server的request事件发送,并作为第二个参数传递,他有三个重要的成员函数,用于返回响应头,响应内容及结束请求。
res.writeHead(statusCode,[heasers]):向请求的的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头
res.write(data,[encoding]):向请求的客户端发送响应内容,data是一个buffer或者字符串,如果data是字符串,这需要定制编码方式,默认为"utf-8",在res.end调用之前可以多次调用
res.end([data],[encoding]):结束响应,告知客户端所有发送已经结束,当所有要返回的内容发送完毕时,该函数必须被调用一次,两个可选参数与res.write()相同
二、http客户端
1.http.request(options,callback)
options是一个类似关联数组的对象,表示请求的参数,callback作为回调函数,需要传递一个参数,为http.ClientResponse的实例,http.request返回一个http.ClientRequest的实例
2.http.get(options, callback)
是http.request的简化版
3.http.ClientRequest
http.ClientRequest是由http.request或http.get返回产生的对象,表示一个已经产生且正在进行中的HTTP请求,提供一个response事件,就是我们使用http.get和http.request方法中的回调函数所绑定的对象。
4.http.ClientResponse
与http.ServerRequest类似
以上是关于nodejs之HTTP模块学习的主要内容,如果未能解决你的问题,请参考以下文章