一尘不染

如何在http.TimeoutHandler中使用大猩猩mux

go

在用go编写的HTTP服务器中,我使用大猩猩/多路复用器进行路由,
我想使用http.TimeoutHandler(和/或其他“中间件”),但我不知道该在哪里放置它们。

明确说明:

  1. 我通过创建一个新的路由器 gorillaMux := mux.NewRouter()
  2. 通过类似的电话添加我的路线 gorillaMux.HandleFunc("/", rootHandler)
  3. 我通过server := &http.Server{Addr:":1234"}和创建服务器server.ListenAndServe()

http.TimeoutHandler为此,我可以在哪里插入或任何其他中间件?


阅读 273

收藏
2020-07-02

共1个答案

一尘不染

这是您可以执行的操作:

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
    "time"
)

func rootHandler(w http.ResponseWriter, r *http.Request) {
    time.Sleep(5 * time.Second)
    fmt.Fprintf(w, "Hello!")
}

func main() {
    mux := mux.NewRouter()
    mux.HandleFunc("/", rootHandler)

    muxWithMiddlewares := http.TimeoutHandler(mux, time.Second*3, "Timeout!")

    http.ListenAndServe(":8080", muxWithMiddlewares)
}

如果您有多个HTTP处理程序,则可以将它们堆叠起来:

// this is quite synthetic and ugly example, but it illustrates how Handlers works
muxWithMiddlewares := http.StripPrefix("/api", http.TimeoutHandler(mux, time.Second*3, "Timeout!"))
2020-07-02