0
点赞
收藏
分享

微信扫一扫

node.js http模块

萍儿的小确幸 2022-03-17 阅读 168

前言

看node.js的模块中方法是比较头疼,所以我们要学会如何寻找方法之间联系,学会http模块的大体流程就足够了。总的一句话就是识大体,细枝末节可以先不考虑

http模块用于客户端和服务端之间,也就是说写的代码也在这两端之间

http服务器

在这里插入图片描述
http请求被拆分成请求和响应被添加到处理程序中

function(req,res){}

这个形式的回调函数在http方法中使用很常见。同时后面也要研究request和response这两个对象。

创建一个http服务器

var server=http.createServer()
var server=new http.Server()

两种方式都是可以创建服务器。一个请求到达服务器,他是有生命周期的,在不同的阶段(事件),http插入了不同的钩子(函数)。

第一个是server上面的事件

  1. request事件,客户端请求达到是触发
  2. connect事件,tcp连接建立时触发
  3. close事件,服务器关闭触发,这里不是用户连接断开连接

我们常用的就是request事件
事件的基本形式server.on('xx',function(arguments){})

var server=http.createServer(function(req,res){
    res.end('完成')
})

上面这个函数实际上是实现了两个功能,他将http服务器的创建和require事件触发相结合在一起了

request请求对象

请求分为请求体和请求头两部分组成
在这里插入图片描述
这是request能够读取到属性

请求体也是一个有生命的事物,他也有自己的事件

  1. data,请求体的内容就是通过这个事件传递,不过他不是传输请求体整块的内容,而是以chunk块形式传递。如果想要获取一个完整的内容需要使用字符串的拼接 res.on('data',function(chunk){})
  2. end,请求体数据传输完成会触发
  3. close,用户请求结束触发,用户强制取消也会触发

如果你使用过express这类框架,你会发现这个http服务器没办法对不同url和请求方法(get,post之类)做独立的处理

所要处理我们得手动定义逻辑,get方法在url中设置请求参数,我们要提取出来,post请求在请求体中设置数据,我们也需要通过事件提取出来。

我们手动去处理在大规模情况下,安全和效率都得不到保证,所有不推荐使用

response对象

他又三个方法

  1. res.writeHead(状态码,{请求头对象}),这里还有一个setHead方法,但是我觉得上面那个就够用了,同时两者同时书写,writeHead会覆盖setHead
  2. res.write(String|Buffer) 用于设置请求体
  3. res.end(数据,编码方式)代表响应体的结束数据丢入到请求体中,如果不使用这个方法,客户端就会一直处于等待状态

http客户端

发送请求的方式:

http.request(option)
http.get(option)

两者返回值都是一个 http.ClientRequest 实例(假设是req)

  1. option相当于设置一些请求头相关的信息
  2. host :请求网站的域名或 IP 地址。
  3. port :请求网站的端口,默认 80。
  4. method :请求方法,默认是 GET。
  5. path :请求的相对于根的路径,默认是“/”。QueryString 应该包含在其中。
  6. headers:设置请求头

后续可以使用一些方法去书写请求体

req.write()
req.end()

必须使用end代表本次请求报文编辑结束了,如果不调用服务器会收集不到

还有一些方法用于控制请求报文的发送(req.abort终止请求报文的发送)和请求超时(req.setTimeout(number,callback:funciton))

事件:
1.response事件,代表收到响应的事件,回调函数传递一个ClientResponse对象

2.data:事件收到响应的报文体内容,数据的传递也是chunk块

3.end:数据传输结束

4.close:连接结束事件

举报

相关推荐

0 条评论