doudi7570 2013-10-29 13:30
浏览 43
已采纳

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

In an HTTP server written in go, I use gorilla/mux for routing,
I want to use http.TimeoutHandler (and/or other "middleware") but I can't understand where I can fit them.

To make it clear:

  1. I create a new Router by gorillaMux := mux.NewRouter()
  2. add my routes by calls like gorillaMux.HandleFunc("/", rootHandler)
  3. I create the server by server := &http.Server{Addr:":1234"} and server.ListenAndServe()

Where can I insert the http.TimeoutHandler or any other middleware for that matter?

  • 写回答

2条回答 默认 最新

  • dongwen2896 2013-10-29 13:44
    关注

    Here is how you can do this:

    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)
    }
    

    If you have more than one HTTP handler, you can stack them up:

    // this is quite synthetic and ugly example, but it illustrates how Handlers works
    muxWithMiddlewares := http.StripPrefix("/api", http.TimeoutHandler(mux, time.Second*3, "Timeout!"))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 前台报错,加我微信帮我解决一下,15043457399
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题