http模块是nodejs中十分重要的一部分,用于开启一个服务,咱们能够用它自定义接口供客户端应用。

开启服务的形式也比较简单,几行代码就能够搞定

const http = require('http')const server = http.createServer((req, res)=>{  res.end('hello world')})server.listen('8000', ()=> {console.log('8000端口已启动~')})// 在命令行工具中输出 node [以后的文件名] 即可启动,启动胜利后在命令行工具输入:8000端口已启动~

通过 createServer 创立服务时,传入的回调函数里的两个参数别离是request和result即申请和响应,request里有很多和申请相干的参数。
罕用的属性是url、method和headers即申请的链接,办法和头部信息,头部信息里又包含了主机名、可承受压缩的模式、申请类型、申请长度等等。
http模块须要依据这些信息进行不同的申请解决,从而给客户端返回绝对应的后果。用postman模仿发送post申请,打印的request的三个参数如下图所示。

get申请的参数能够通过url间接获取,并对数据进行解决,而post申请的参数是放在body中的,不能间接通过header获取,须要通过 req.on来监听参数的内容,获取到的数据类型默认是 Buffer,能够通过req.setEncoding设置为须要的数据类型,utf-8、binary等,或者通过Buffer数据toString()办法能够转换成 utf-8的编码模式

const server = http.createServer((req, res)=>{  console.log('req.url:', req.url)  req.on('data', data=>{    console.log('post申请的data: ',data.toString())  })  res.end('hello world')})

http的申请和响应是以数据流的模式传递的,响应能够通过 end办法来写入响应内容并敞开流,默认是相应格局为text类型,如果须要传递其余类型的响应后果,须要通过setHeader或者writeHead来定义Content-Type,Content-Type默认是 text/plain,即文本,更改为 text/html 即下图展现的html渲染形式

const server = http.createServer((req, res)=>{  res.setHeader("Content-Type", "text/html")  res.end('<h1>hello node</h1>')})

http模块能够开启一个服务,用来解决客户端发送过去的http申请,同时,它也能够发送http申请,get申请和post申请接管响应的相同点在于都须要通过on来监听data,从回调函数中获取响应后果,不同点在于post申请还须要监听申请完结的end办法,当end办法执行时,再敞开此次post申请。

const http = require('http')// get申请监听data办法http.get('http://localhost:8000', (res)=>{  res.on('data', data=>{    console.log('get申请的响应:', data.toString())  })})// post申请还需监听end办法,以及敞开申请const req = http.request({  method: 'post',  port: 8000,  hostname: 'localhost'}, res=>{  res.on('data', data=>{    console.log('post申请的响应:',data)  })  res.on('end', ()=>{    console.log('post申请获取到了所有申请后果')  })})req.end()

http模块的简单点在于解决申请参数,get申请的参数通过字符串解析url就能够,post申请须要依据上传类型来进行辨别,上传的是json数据、urlencoded还是文件,解析的形式都不雷同,所以通常会应用框架来简化咱们的编码流程, express和koa都极大的简化了逻辑的处理过程。