如何在多路复用器中设置路由变量

Posted

技术标签:

【中文标题】如何在多路复用器中设置路由变量【英文标题】:How to set route vars in mux 【发布时间】:2014-12-22 05:44:37 【问题描述】:

我想将 2 个 url 绑定到 1 个函数,如下所示。

router.HandleFunc("/_Users", controller.AddResource)
router.HandleFunc("/Resources/resourceName", controller.AddResource)

“controller.AddResource”是一个全局函数。代码如下:

function AddResource(req *http.Request, w http.ResponseWriter)
    vars := mux.Vars(req)
    resourceName := vars["resourceName"]
    data = request.Body
    AddDataToResource(resourceName, data)

那么如何在第一个路由器中设置 vars(resourceName='_User')

【问题讨论】:

【参考方案1】:

创建一个设置 mux var 的处理程序包装器:

type setVarWrapper struct 
    fn func(http.ResponseWriter, *http.Request)
    name string
    value string


func (h *setVarWrapper) ServeHTTP(w http.ResponseWriter, r *http.Request) 
   mux.Vars(req)[h.name] = h.value
   h.fn(w, r)

包装用户控制器:

router.Handle("/_Users, &setVarWrapperfn:controller.AddResource, name:"resourceName", value:"_User")

一个更简单的选择是编写一个调用通用控制器的 AddUser 函数:

function addUser(req *http.Request, w http.ResponseWriter)
    mux.Vars(req)["resourceName"] = "_User"
    controller.AddResource(w, req)


router.HandleFunc("/_Users", addUser)

也许更简单的是在处理程序中检查“”:

function AddResource(req *http.Request, w http.ResponseWriter)
    vars := mux.Vars(req)
    resourceName := vars["resourceName"]
    if resourceName == "" 
       resourceName = "_User"
    
    data = request.Body
    AddDataToResource(resourceName, data)

【讨论】:

以上是关于如何在多路复用器中设置路由变量的主要内容,如果未能解决你的问题,请参考以下文章

默认服务器多路复用器如何匹配 url 模式

Kotlin 协程协程中的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 )

Axios 发布请求正文未使用多路复用器服务器解析

如何在 OkHttp 上进行多路复用?

NAT网络地址转换——动态地址转换,PAT端口多路复用(实操!!)

RPi Pyaudio/Portaudio + ALSA:如何选择/更改多路复用器输入