【问题标题】:Go (GoLang) Gorilla/Mux Set Response CodeGo (GoLang) Gorilla/Mux 设置响应代码
【发布时间】:2022-01-20 11:49:37
【问题描述】:

我在尝试为 Go 中的 Gorilla Mux 路线设置响应代码时遇到了困难。如果我有一个非常简单的路线设置为

// dummy test route
router.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Headers", "*")
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Methods", "POST, GET")
    w.Header().Set("Content-Type", "application/json")
    fmt.Fprintf(w, "{\"message\":\"OK\"}")
}).Methods("POST")

它似乎工作正常并返回 200 的状态,这很好,但如果我尝试手动设置响应代码,如下所示。

// dummy test route
router.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK) // added this to test
    w.Header().Set("Access-Control-Allow-Headers", "*")
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Methods", "POST, GET")
    w.Header().Set("Content-Type", "application/json")
    fmt.Fprintf(w, "{\"message\":\"OK\"}")
}).Methods("POST")

然后它似乎已将响应代码设置为 200,但在发出 REST 请求时它仍然作为错误出现

POST *url*/test net::ERR_FAILED 200

我不确定这是为什么,但这不是设置响应代码的正确方法吗?

【问题讨论】:

  • 在响应操作结束时设置状态码。因此,在您设置所有其他标题之后。

标签: go gorilla mux http-response-codes


【解决方案1】:

WriteHeader 函数写入响应并刷新它时,您必须在最后编写状态代码。

// dummy test route
router.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Headers", "*")
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "POST, GET")
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusOK) // Set your code here, after setting your headers
        fmt.Fprintf(w, "{\"message\":\"OK\"}")
}).Methods("POST")

【讨论】:

  • 这解决了它,哇。我不知道这些命令的顺序很重要,非常感谢!时间一到,我会接受正确答案
  • 没问题,乐于助人。我实际上建议不要使用多路复用器,因为有更好的替代方案(例如gofiber.io)可以更快、更容易地使用。 :) 特别是因为 mux 正在寻找新的维护者。 (见github.com/gorilla/mux/issues/659
猜你喜欢
  • 2015-05-03
  • 2014-02-09
  • 1970-01-01
  • 2014-12-21
  • 2015-04-02
  • 2016-04-07
  • 2018-07-30
  • 2015-04-18
  • 2022-01-27
相关资源
最近更新 更多