标签: go-alice

如何将Go中间件模式与错误返回请求处理程序结合起来?

我熟悉Go中间件模式,如下所示:

// Pattern for writing HTTP middleware.
func middlewareHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Our middleware logic goes here before executing application handler.
        next.ServeHTTP(w, r)
        // Our middleware logic goes here after executing application handler.
    })
}
Run Code Online (Sandbox Code Playgroud)

例如,如果我有一个loggingHandler:

func loggingHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Strated %s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start)) …
Run Code Online (Sandbox Code Playgroud)

middleware go go-alice

6
推荐指数
1
解决办法
2333
查看次数

HTTP路由器和中间件

我正在使用Julien Schmidt的GoLang路由器,并尝试让它与Alice合作来连接中间件.我收到这个错误:

不能使用commonHandlers.ThenFunc(final)(类型http.Handler)作为路由器的参数httprouter.Handle.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") …
Run Code Online (Sandbox Code Playgroud)

middleware go go-alice

3
推荐指数
1
解决办法
2270
查看次数

标签 统计

go ×2

go-alice ×2

middleware ×2