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

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据