2015-05-19 5 views
3

Я использую маршрутизатор Жюльена Шмидта для GoLang и пытаюсь заставить его работать с Алисой для связывания промежуточного программного обеспечения. Я получаю эту ошибку: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 типа. Используйте метод Handler с http.Handler:

router.Handler("GET", "/", commonHandlers.ThenFunc(final)) 
Смежные вопросы