2017-05-15 8 views
0

ゴリラミドルウェアを使用して、を処理した後にを実行しようとすると、各リクエストのレスポンスを変更します。ゴリラマルチプレクサ処理後にミドルウェアを実行する

コードサンプルは以下を参照してください。現在は 'before run、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))) 
} 

答えて

0

使用

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) 
} 
関連する問題