为了账号安全,请及时绑定邮箱和手机立即绑定

mux 在 url 中有空参数

mux 在 url 中有空参数

Go
HUH函数 2022-07-18 16:19:13
我有这个主要的: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())    }}这是路由器: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 总是返回一个空地图。我究竟做错了什么?这是一个示例处理程序: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)}
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

mux.Vars()仅在路由匹配时才会填充(因此 Gorilla mux 知道在哪里寻找它们)。路由中的匹配是通过在路由中预期变量值的地方使用或者{name}或占位符来完成的。{name:pattern}


所以对于以下路线:


r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)

您将拥有 vars 键category并id使用它们各自的值进行设置:


vars := mux.Vars(r)

fmt.Fprintf(w, "Category: %v\n", vars["category"])

fmt.Fprintf(w, "Id: %v\n", vars["id"])

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


func (h HandlerProvider) GetRouter() *mux.Router {

// ...

r.HandleFunc("/people/{id:[0-9]+}", GetPeopleByID).Methods("GET")

// ...

}

有关如何在此处使用 vars 的信息,请参阅 Gorilla Mux 文档:https ://github.com/gorilla/mux#examples ,特别是以以下开头的部分:


路径可以有变量。它们使用 {name} 或 {name:pattern} 格式定义。如果未定义正则表达式模式,则匹配的变量将是任何东西,直到下一个斜杠。


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号