zoukankan      html  css  js  c++  java
  • 难道这就是gin中间件的原理,一个装饰者模式而已?

    func wrapCtx(handler func(ctx *gin.Context)) gin.HandlerFunc {
        return func(c *gin.Context) {
            //获取请求的url
            log.Info("当前请求url:%s", c.Request.RequestURI)
            token := c.GetHeader("token")
            log.Info("当前请求token:%s", token)
            //获取请求的body内容
            data, err := c.GetRawData()
            if err != nil {
                fmt.Println(err.Error())
            }
            if data != nil {
                log.Info("请求body内容为:%s", data)
            }
            //很关键
            //把读过的字节流重新放到body
            c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))
            //获取请求的body内容
            //body, _ := ioutil.ReadAll(c.Request.Body)
            //if body != nil {
            //    log.Info("请求body内容为:%s", body)
            //}
            //获取所有请求的post参数
            //有文件时,这里会有bug
            c.Request.ParseMultipartForm(200000)
            c.Request.ParseForm()
            postStr := ""
            for k, v := range c.Request.PostForm {
                postStr += fmt.Sprintf("%v:%v	", k, v)
            }
            if postStr != "" {
                log.Info("post数据:%s", postStr)
            }
            handler(c)
        }
    }


    r.POST("/hello", wrapCtx(test.Hello))
     
  • 相关阅读:
    java笔记之连接数据库
    关于数据集合的使用
    ubuntu下安装MySql
    Android笔记之Broadcast广播机制
    InputStream
    Android笔记之Toast
    jqGrid 复选框实现单选
    layer弹出框包含页面
    input不显示边框
    UUID
  • 原文地址:https://www.cnblogs.com/wujf/p/10700063.html
Copyright © 2011-2022 走看看