• 记录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)
    })
    
    • 1
    • 2
    • 3
    • 4

    接口测试http文件

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

    返回结果

    {
      "id": "1",
      "aa": "1"
    }
    
    • 1
    • 2
    • 3
    • 4

    1.2 get动态传参

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

    接口

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

    测试

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

    返回结果

    {
      "id": "1",
      "bb": "22"
    }
    
    • 1
    • 2
    • 3
    • 4

    2、post通过data传参

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

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

    接口

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

    测试

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

    返回结果

    {
      "id": "3",
      "cc": "33"
    }
    
    • 1
    • 2
    • 3
    • 4

    2.2 post在url里动态传参

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

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

    测试

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

    结果

    {
      "id": "4"
    }
    
    • 1
    • 2
    • 3

    2.3post通过json格式传参

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

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

    测试

    ###post json格式传参
    POST {{url}}/demo5 HTTP/1.1
    Content-Type: application/json
    
    {"id":"5","name":"乔琛"}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果

    {
      "id": "5",
      "name": "乔琛"
    }
    
    • 1
    • 2
    • 3
    • 4

    2.4post使用拼接字符串传参

    接口

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

    测试

    ### post 拼接字符串传参
    POST {{url}}/demo6 HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    id=6&password=123456
    
    • 1
    • 2
    • 3
    • 4
    • 5

    返回结果

    {
      "id": "6",
      "password": "123456"
    }
    
    • 1
    • 2
    • 3
    • 4

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

    接口

    app.post('/demo7',(req,res)=>{
        let data = {
            ...req.query,
            ...req.body
        }
        res.send(data)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    测试

    ###
    POST {{url}}/demo7?id=7&&aa=007 HTTP/1.1
    Content-Type: application/json
    
    {"username":"Tom","password":"7890"}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    返回结果

    {
      "id": "7",
      "aa": "007",
      "username": "Tom",
      "password": "7890"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    总结

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

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

  • 相关阅读:
    利用浩客无代码开发API集成客服系统,提升用户服务质量
    QString格式化
    充电器快充取电芯片XSP06Q+锂电池5A电流快速充电
    C++ 定义一个地图类和地点类,开发一个小游戏。
    Linux学习第18天:Linux并发与竞争: 没有规矩不成方圆
    【数据结构】单链表
    [附源码]Python计算机毕业设计Django的低碳生活记录网站
    西交软件915历年真题_编程题汇总与分析
    HAproxy+nginx 搭建负载均衡集群(haproxy日志收集)
    辅助驾驶功能开发-功能对标篇(3)-NOP领航辅助系统-蔚来
  • 原文地址:https://blog.csdn.net/qq_43687594/article/details/126669704