乐趣区

关于前端:nodejs中如何使用http创建一个服务

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 都极大的简化了逻辑的处理过程。

退出移动版