记录get和post的理解误区

此前,我一直认为get只能通过url的查询字符串、动态传参,post传参的方式只能通过请求体,在项目开发的过程中,常用的情景也确实如此,但这并不代表,post只能通过请求体传参,post也能通过查询字符串传参,只不过是很少用罢了。
post请求支持多种(multipart/form-data等)。不常用的就没记录。

1、get传参

1.1 查询字符串传参

查询字符串传参也就是我们最常见的形式: ?id=1&aa=1 形式
接收参数是req.query
接口

// get 查询字符串传参
app.get('/demo1',(req,res)=>{
    res.send(req.query)
})

接口测试http文件

@url = http://localhost:5000
### querystring
GET {{url}}/demo1?id=1&aa=1 HTTP/1.1

返回结果

{
  "id": "1",
  "aa": "1"
}

1.2 get动态传参

动态传参需要给url设置占位符,通过 冒号+字符 作为占位,设置几个占位符,传参时就必须传几个,缺一不可,否则就会报404错误
接收参数是req.params

接口

// get 动态传参
app.get('/demo2/:id/:bb',(req,res)=>{
    res.send(req.params)
})

测试

### get动态传参
GET {{url}}/demo2/1/22 HTTP/1.1

返回结果

{
  "id": "1",
  "bb": "22"
}

2、post通过data传参

2.1 post在url中查询字符串传参

这里就是我理解有误的地方,我以为post只能通过请求体传参,不能在url内传,嗯…事实证明我错了,post不仅能在url里传参,还一样支持查询字符串和动态传参~
post通过查询字符串传参,接收参数依旧是req.query

接口

// post 查询字符串传参
app.post('/demo3',(req,res)=>{
    res.send(req.query)
})

测试

###post querystring
POST {{url}}/demo3?id=3&cc=33 HTTP/1.1

返回结果

{
  "id": "3",
  "cc": "33"
}

2.2 post在url里动态传参

与查询字符串一样的道理,接收参数req.params
接口

// post 动态传参
app.post('/demo4/:id',(req,res)=>{
    res.send(req.params)
})

测试

###  post 动态传参
POST {{url}}/demo4/4 HTTP/1.1

结果

{
  "id": "4"
}

2.3post通过json格式传参

post请求体内传参,需要设置请求头的格式,设置格式为json,那么数据就得写成json数据格式,如果请求头格式和数据格式不一样,是不能正确接收到返回值的。
接口

// post json格式传参
app.post('/demo5',(req,res)=>{
    res.send(req.body)
})

测试

###post json格式传参
POST {{url}}/demo5 HTTP/1.1
Content-Type: application/json

{"id":"5","name":"乔琛"}

结果

{
  "id": "5",
  "name": "乔琛"
}

2.4post使用拼接字符串传参

接口

// post 拼接字符串传参
app.post('/demo6',(req,res)=>{
    res.send(req.body)
})

测试

### post 拼接字符串传参
POST {{url}}/demo6 HTTP/1.1
Content-Type: application/x-www-form-urlencoded

id=6&password=123456

返回结果

{
  "id": "6",
  "password": "123456"
}

2.5post查询字符串和json一起使用传参

接口

app.post('/demo7',(req,res)=>{
    let data = {
        ...req.query,
        ...req.body
    }
    res.send(data)
})

测试

###
POST {{url}}/demo7?id=7&&aa=007 HTTP/1.1
Content-Type: application/json

{"username":"Tom","password":"7890"}

返回结果

{
  "id": "7",
  "aa": "007",
  "username": "Tom",
  "password": "7890"
}

总结

除了post,其实put、delete请求都是一样的道理,传参的形式并不是根据get、post、put、delete来固定传参格式的,它们都能在请求头和请求体里传参,对应的用请求头的查询字符串传参,那就用query接收,动态传参就用params接收,请求体里传参那就必须设置好请求头格式问题,通过body接收参数。

只是我们在项目开发时,常常根据最优性能和选择,才会区分选择传参方式。例如get传参,get它的参数会放在url中,隐私性、安全性较差,请求的数据长度是有限制的,但是当我们传的参数并不那么重要,数据也没有很多,选择get请求就显得比post简单很多。
还有很重要的一点,也就是我为什么会知道自己的这个误区,因为在使用post时不仅仅能传data,还能传query >_<

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值