【问题标题】:golang mux HandleFunc always 404golang mux HandleFunc 总是 404
【发布时间】:2015-06-02 16:25:15
【问题描述】:

由于某些原因,我尝试使用 mux 而不是来自 net/http 的标准 HandleFunc 来处理 HTTP 请求。使用 http 它曾经可以工作,而使用 mux 则不能。

import (
    _ "github.com/go-sql-driver/mysql"
    "github.com/gorilla/mux"
    _ "io/ioutil"
    "net/http"
)


func init() {

    mx := mux.NewRouter()

    //create a poll
    mx.HandleFunc("/poll", pollCreate)
    mx.HandleFunc("/poll/{id}", loadPoll)
    mx.HandleFunc("/poll/vote", castVote)

    http.ListenAndServe(":8080", mx)
}

以下 POST 请求

localhost:8080/poll

结果:

INFO     2015-06-02 16:23:12,219 module.py:718] default: "POST /poll HTTP/1.1" 404 19

【问题讨论】:

  • 我无法使用简单的程序 (play.golang.org/p/9QQEkVED8i) 重现此问题。您是否有一个最小的、完整的、可验证的测试用例来证明问题?
  • module.py 表明您已经有一个 python 程序正在监听该端口,而您的 Go 应用无法绑定到该端口

标签: http go


【解决方案1】:

找到解决方案。

改变

http.ListenAndServe(":8080", mx)

http.Handle("/", mx)

【讨论】:

  • 这需要更多的解释。您不再指定要监听的端口,所以...这里发生了什么?
【解决方案2】:

您忘记添加默认处理程序。将方法与处理程序保持在一起总是更好。

 import (
        _ "github.com/go-sql-driver/mysql"
        "github.com/gorilla/mux"
        _ "io/ioutil"
        "net/http"
    )


func init() {

    mx := mux.NewRouter()

    //create a poll
    mx.Path("/").HandlerFunc(indexHandler)
    mx.PathPrefix("/poll", pollCreate).Method("POST)
    mx.PathPrefix("/poll/{id}", loadPoll)
    mx.PathPrefix("/poll/vote", castVote)

    http.ListenAndServe(":8080", mx)
}

【讨论】:

    猜你喜欢
    • 2014-02-09
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多