【问题标题】:Run middleware after Gorilla mux handling在 Gorilla mux 处理后运行中间件
【发布时间】:2017-10-14 01:32:37
【问题描述】:

我正在尝试使用 Golang 中间件在处理 Gorilla Mux 路由之后运行,以更改每个请求的响应。

代码示例见下文。目前它返回'run before,run test',目标是使用runsafter中间件返回'run before,run test,run after'。

Gorilla Mux 可以实现类似的功能吗?

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
)

func runsbefore(h http.Handler) http.Handler {
    fn := func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("run before, "))
        h.ServeHTTP(w, r)
    }

    return http.HandlerFunc(fn)
}

func runsafter(h http.Handler) http.Handler {
    fn := func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("run after, "))
        h.ServeHTTP(w, r)
    }

    return http.HandlerFunc(fn)
}

func runtest(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("run test, "))
}

func main() {
    fmt.Println("Server starting on port 8000")
    r := mux.NewRouter()
    r.HandleFunc("/", runtest).Methods("GET")
    http.ListenAndServe(":8000", runsbefore(r))
    // something like: http.ListenAndServe(":8000", runsbefore(r(runsafter)))
}

【问题讨论】:

    标签: go gorilla mux


    【解决方案1】:

    使用

    http.ListenAndServe(":8000", runsAfter(runsbefore(r)))
    

    并修复runsAfter中的错误:

    func runsafter(h http.Handler) http.Handler {
      fn := func(w http.ResponseWriter, r *http.Request) {
        h.ServeHTTP(w, r)
        w.Write([]byte("run after, "))
      }
    
      return http.HandlerFunc(fn)
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2015-04-07
      • 2014-11-28
      • 2015-04-02
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      相关资源
      最近更新 更多