node.js中HTTP不同请求方法的处理(GET,POST),如何获取GET,POST请求中的参数

前言

最近刚上手nodejs,所以目前用的是原生的node.js,本文讲一下在原生node中对于http不同的请求方法如何处理,以get和post进行举例

起航

初次接触到node的朋友,我们先来看看如何开始建立一个web服务
注释都表明在了代码中

// 导入http对象
var http = require('http')

// 创建服务器,获取服务器对象
var server = http.createServer()
// 监听端口
server.listen(8080, function () {
  console.log('http://127.0.0.1:8080');
})
// 监听request事件,req是请求的所有信息,res是响应的所有信息
server.on('request', function (req, res) {
})

下面我们来看看如何处理不同的http请求

GET请求

上面我们说了,在server.on(‘request’, function (req, res) {})中,req是请求的所有信息,所有我们可以在里面使用req.method判断请求的类型是否为GET

如果要获取get请求的参数该怎么做呢?先打印req.url看看

server.on('request', function (req, res) {
  // console.log(req.method)
  if (req.method == "GET") {
    console.log(req.url)
  }
})

访问浏览器 查看控制台
在这里插入图片描述
能拿到/user?id=9,但是我们想要拿到id=9,如果使用正则处理又会很麻烦,这是就可以借助到另一个工具 url
直接在头部进行引入:

var url = require('url')

然后直接用url.parse进行使用,

 console.log( url.parse(req.url))

打印看看:关于url所有的信息 一览无余
在这里插入图片描述

这里的query的值为‘id=9’,我们只想要9怎么做呢
直接在后面加一个true

console.log( url.parse(req.url,true))

query中是一个对象, url.parse(req.url,true).query.id拿到我们想要的值
在这里插入图片描述
以上是GET请求方法中,如何获取它的传参

POST请求

跟上面一样,使用req.method进行判断:

server.on('request', function (req, res) {
  if (req.method == "GET") {
    console.log(req.url)
  }else if(req.method == "POST"){
  }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
})

post请求的数据是放在请求体中进行请求传参,所以我们需要使用Net事件获取到数据
因为http是基于Net的,所以http的请求对象可以直接使用net的事件。绑定data事件,因为数据是放在消息体当中的,消息体是分包发送的,所以每当有数据来到服务器的时候,data就会去触发,每触发一次,data事件就会执行一次,这里的参数d也就是客户端给我们传入的数据:

server.on('request', function (req, res) {
  if (req.method == "GET") {
    console.log(req.url)
  }else if(req.method == "POST"){
  	req.on('data',function(d){
      console.log(d);
    })
  }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
})

因为这里post这里的数据是流数据,所以需要等待客户端把全部数据发送后再处理和打印,所以像先在前面生命一个字符串data。每次获取到数据就拼接到data中。

var data = ''
req.on('data',function(d){
   data += d
 })

然后我们还需要绑定end在结束之后把得到的数据进行转义处理:

var data = ''
req.on('data',function(d){
   data += d
})
req.on('end',function(){
  console.log( require('querystring').parse(data))
})

进行post请求然后查看,这样就获取到了post传来的数据
在这里插入图片描述

总结

以上就是关于原生nodejs中如何获取和接收GET.POST请求中的数据,post中获取数据相对麻烦一些。因为http的封装相对底层,http的核心模块只帮我们处理流数据,具体的数据内容需要借助Net里面的data事件和end事件,来进行数据的接收然后使用querystring对数据进行解析和处理

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beiyux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值