在Gorilla mux处理后运行中间件

3

我正在尝试使用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)))
}
1个回答

3

使用

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)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接