首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mux在url中有空参数。

mux在url中有空参数。
EN

Stack Overflow用户
提问于 2020-12-07 02:01:22
回答 1查看 701关注 0票数 0

我有一个主要的:

代码语言:javascript
复制
func main() {
    r := _routerprovider.GetRouter()
    srv := &http.Server{
        Handler:      r,
        Addr:         "127.0.0.1:8000",
        WriteTimeout: 60 * time.Second,
        ReadTimeout:  15 * time.Second,
    }
    fmt.Println("Running in port 8000!")
    err := srv.ListenAndServe()
    if err != nil {
        log.Fatalln(err.Error())
    }
}

这是路由器:

代码语言:javascript
复制
func (h HandlerProvider) GetRouter() *mux.Router {
    r := mux.NewRouter()
    r.HandleFunc("/health", Health).Methods("GET")
    r.HandleFunc("/users", GetUsers).Methods("GET")
    r.HandleFunc("/users", CreateUser).Methods("POST")
    r.HandleFunc("/people", GetPeople).Methods("GET")
    r.HandleFunc("/peoplebyid", GetPeopleByID).Methods("GET")
    return r
}

无论我做什么,mux.Vars总是返回一个空映射。我做错了什么?这是一个示例处理程序:

代码语言:javascript
复制
func GetPeopleByID(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    id, ok := params["id"]
    if !ok {
        ErrorHandler(w, r, fmt.Errorf("Error!"), 400)
        return
    }
    idasnumber, err := strconv.Atoi(id)
    if err != nil {
        ErrorHandler(w, r, fmt.Errorf("Error!"), 400)
        return
    }
    value, ok := services.PeopleDict[idasnumber]

    bs, _ := json.MarshalIndent(value, "", "  ")
    w.Write(bs)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-07 02:06:52

只有在路由匹配时才会填充mux.Vars() (因此大猩猩mux知道在哪里查找它们)。路由中的匹配是通过在路由中期望变量值的位置使用{name}{name:pattern}占位符完成的。

因此,以下路线:

代码语言:javascript
复制
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)

您将使用vars键categoryid设置它们各自的值:

代码语言:javascript
复制
vars := mux.Vars(r)
fmt.Fprintf(w, "Category: %v\n", vars["category"])
fmt.Fprintf(w, "Id: %v\n", vars["id"])

在您的代码中,您可以通过这种方式修复/peoplebyid (取决于什么是id),以使GetPeopleById()处理程序正常工作:

代码语言:javascript
复制
func (h HandlerProvider) GetRouter() *mux.Router {
// ...
r.HandleFunc("/people/{id:[0-9]+}", GetPeopleByID).Methods("GET")
// ...
}

参见Gorilla关于如何在这里使用vars的文档:https://github.com/gorilla/mux#examples,特别是以以下部分开头的一节:

路径可以有变量。它们使用格式{name}或{name:pattern}定义。如果未定义正则表达式模式,则匹配变量在下一个斜杠.

之前为任意变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65175157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档