HTTP路由器和中间件



我正在为golang使用朱利安·施密特(Julien Schmidt)的路由器,并试图使其与爱丽丝(Alice)合作以链中间件。我遇到了这个错误:

无法使用concomhandlers.thenfunc(final)(type http.handler)作为type httprouter.handle in to router.get.get

我不太确定为什么。

我的代码是:

package main
import (
  "log"
    "net/http"
    "github.com/julienschmidt/httprouter"
  "github.com/justinas/alice"
    "gopkg.in/mgo.v2"
    //"gopkg.in/mgo.v2/bson"
)

func middlewareOne(next http.Handler) http.Handler {
  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    log.Println("Executing middlewareOne")
    next.ServeHTTP(w, r)
    log.Println("Executing middlewareOne again")
  })
}
func middlewareTwo(next http.Handler) http.Handler {
  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    log.Println("Executing middlewareTwo")
    if r.URL.Path != "/" {
      return
    }
    next.ServeHTTP(w, r)
    log.Println("Executing middlewareTwo again")
  })
}
func final(w http.ResponseWriter, r *http.Request) {
  log.Println("Executing finalHandler")
  w.Write([]byte("OK"))
}
func main() {
    session, err := mgo.Dial("conn-string")
    if err != nil {
        panic(err)
    }
    defer session.Close()
    session.SetMode(mgo.Monotonic, true)
    commonHandlers := alice.New(middlewareOne, middlewareTwo)
    router := httprouter.New()
    router.GET("/", commonHandlers.ThenFunc(final))
    http.ListenAndServe(":5000", router)
}

httprouter的router.GET仅与httprouter.Handle类型一起使用。使用http.HandlerHandler方法:

router.Handler("GET", "/", commonHandlers.ThenFunc(final))

最新更新