登录
首页 >  Golang >  Go问答

httprouter 和 negroni:适用于公共和私有路由的中间件

来源:stackoverflow

时间:2024-02-27 12:18:28 112浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《httprouter 和 negroni:适用于公共和私有路由的中间件》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我很难理解如何一起使用 negroni 和 httprouter。

我有几条公共路线,例如 /api/v1/ping

我有一堆需要auth中间件的私有路由,例如/api/v1/user

如果我想要所有路由都使用 negroni 通用中间件,但我想将 auth 中间件和其他中间件仅应用于私有路由,我该如何设置?

v1.router := httprouter.New()
v1.router.GET("/api/v1/ping", v1.ping)
v1.router.GET("/api/v1/user", v1.getUsers)

n := negroni.Classic()
n.UseHandler(v1.router)

http.ListenAndServe(port, n)

解决方案


您可以尝试将“Path Prefix Middleware in Go ”中描述的技术(使用 net/http/#ServeMux)与另一个路由器 (gorilla/mux) 进行改编,但也应该对 julienschmidt/httprouter 有效:

根据路由前缀指定中间件

这就是神奇发生的地方,也是事情变得混乱的地方。

我发现为路径前缀指定中间件的简单方法是设置第二个复用器(我们在下面使用 sirmuxalot 变量),它具有我们想要应用中间件的路径前缀,然后传入我们的原始路由器封装在一些用于这些路由的中间件中。

这是有效的,因为除非我们定义的路径前缀与传入的 web 请求的路径匹配,否则 sirmuxalot 路由器永远不会调用中间件包装的路由器。

sirMuxalot := http.NewServeMux()
sirMuxalot.Handle("/", r)
sirMuxalot.Handle("/api/", negroni.New(
    negroni.HandlerFunc(APIMiddleware),
    negroni.Wrap(r),
))
sirMuxalot.Handle("/dashboard/", negroni.New(
    negroni.HandlerFunc(DashboardMiddleware),
    negroni.Wrap(r),
))

n := negroni.Classic()
n.UseHandler(sirMuxalot)
http.ListenAndServe(":3000", n)

理论要掌握,实操不能落!以上关于《httprouter 和 negroni:适用于公共和私有路由的中间件》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>