2015-05-19 75 views
3

我正在为GoLang使用Julien Schmidt的路由器,并试图让它与Alice合作来链接中间件。我得到这个错误:HTTP路由器和中间件

不能使用commonHandlers.ThenFunc(最终)(类型http.Handler)类型httprouter.Handle在争论router.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) 
} 
+0

非常感谢您! –

回答

5

httprouter的router.GET作品与httprouter.Handle类型。与http.Handler使用Handler方法:

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