当前位置: 首页 > 面试题库 >

Gorilla Mux定制中间件

司寇苗宣
2023-03-14
问题内容

我正在使用大猩猩多路复用器来管理路由。我所缺少的是在每个请求之间集成中间件。

例如

package main

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

func HomeHandler(response http.ResponseWriter, request *http.Request) {

    fmt.Fprintf(response, "Hello home")
}

func main() {

    port := 3000
    portstring := strconv.Itoa(port)

    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler)
    http.Handle("/", r)

    log.Print("Listening on port " + portstring + " ... ")
    err := http.ListenAndServe(":"+portstring, nil)
    if err != nil {
        log.Fatal("ListenAndServe error: ", err)
    }
}

每个传入的请求都应通过中间件。如何在这里集成中间件?

更新资料

我将其与大猩猩/会议结合使用,他们说:

重要说明:如果您不使用大猩猩/多核,则需要使用context.ClearHandler包装处理程序,否则会泄漏内存!一种简单的方法是在调用http.ListenAndServe时包装顶级mux:

如何防止这种情况?


问题答案:

只需创建一个包装器,在Go中就很容易了:

func HomeHandler(response http.ResponseWriter, request *http.Request) {

    fmt.Fprintf(response, "Hello home")
}

func Middleware(h http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println("middleware", r.URL)
        h.ServeHTTP(w, r)
    })
}
func main() {
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler)
    http.Handle("/", Middleware(r))
}


 类似资料:
  • 我正在构建一个Golang应用程序,它实现了一个与Sidekiq兼容的Jrallison/Go-Workers工作队列和一个围绕Sirupsen/Logrus的定制日志包装器,用于封送的JSON日志。 现在,我的所有应用程序(到目前为止除外)都在中心位置使用我的记录器包装器,以确保其输出100%与JSON兼容。 请注意,第1行和第2行是来自中央记录器的正确JSON,但是当初始化时,我们会看到第3行

  • Handler 是tango的中间件。在tango中,几乎所有的事情都由中间件来完成。撰写一个你自己的中间件非常简单,并且我们鼓励您只加载需要的中间件。 tango的中间件只需要符合以下接口即可。 type Handler interface { Handle(*tango.Context) } 同时,tango也提供了tango.HandlerFunc,以方便你将一个函数包装为中间件。比

  • 控制器中间件 V5.1.17+版本开始,支持为控制器定义中间件。首先你的控制器需要继承系统的think\Controller类,然后在控制器中定义middleware属性,例如: <?php namespace app\index\controller; use think\Controller; class Index extends Controller { protected $

  • 中间件是 WebHook 的一种变种模式,不同的是它早于 WebHook 执行,你可以做一些有用的前置拦截,比如 token 校验、日志记录等等。 实现一个中间件可以参考一个例子: public class BasicAuthMiddleware implements WebHook { private static final int AUTH_LENGTH = 6; priv

  • 本文向大家介绍node中koa中间件机制详解,包括了node中koa中间件机制详解的使用技巧和注意事项,需要的朋友参考一下 koa koa是由express原班人马打造的一个更小、更富有表现力、更健壮的web框架。 在我眼中,koa的确是比express轻量的多,koa给我的感觉更像是一个中间件框架,koa只是一个基础的架子,需要用到的相应的功能时,用相应的中间件来实现就好,诸如路由系统等。一个更

  • CORS(访问控制) 中间件 CORS 中间件实现了 CORS 的标准。CORS 提供给 web 服务器跨站的访问控制,使得跨站的数据传输更安全。 使用 e.Use(middleware.CORS()) 自定义配置 使用 e := echo.New() e.Use(middleware.CORSWithConfig(middleware.CORSConfig{ AllowOrigins: []