首页 > 解决方案 > 主机参数在 mux.Vars() 中不可用

问题描述

我正在使用带有通配符子域的 Gorilla mux 路由。但是,子域值未填充到mux.Vars(). 这是我的示例程序:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func indexHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    log.Println(vars)
    fmt.Fprintf(w, "hello")
}

func main() {
    router := mux.NewRouter()
    router.Host("{subdomain}.localhost.com").Path("/{id}").HandlerFunc(indexHandler)

    srv := &http.Server{
        Handler: router,
        Addr:    ":8080",
    }
    log.Fatal(srv.ListenAndServe())
}

我正在导航到http://sub.localhost.com:8080/123,并相应地使用此子域更新了我的/etc/hosts文件。helloMux在浏览器中显示时正确地找到了这条路线。

在这种情况下,我期望vars有两个键:subdomainid,分别带有值sub123。但是,当我打印 的值时vars,输出如下:

map[id:123]

为什么subdomain失踪?以及如何从我的处理程序访问该值?

标签: gomux

解决方案


您的测试 URL 格式不正确。您正在使用

http://sub.localhost.com/123:8080

这会产生一个 URL 路径/123:8080- 很可能是一个无效的 ID。

你想要:

http://sub.localhost.com:8080/123

这会产生/123与您的路由器匹配的 URL 路径。


推荐阅读