首页 > 文章列表 > Gin框架与中间件的使用

Gin框架与中间件的使用

359 2024-02-11
问题内容

如何制作一个中间件,使其仅适用于某些处理程序(不适用于所有处理程序)? 例如,

func (srv *server) Router(repository storage.Repository, cfg config.Flags) *gin.Engine {
 h := handlers.NewHandlerProvider()
 m := middlewares.NewMiddlewareProvider()
 srv.httpServer.Use(gin.Recovery())
 srv.httpServer.Use(m.LogHTTPHandler())
 srv.httpServer.POST("/", FirstHandler)
 srv.httpServer.GET("/qwe", SecondHandler)
 return srv.httpServer
}

我只想 m.loghttphandler() 只与 firsthandler 一起使用,而不是两者都使用


正确答案


使用gin.routergroup对所有具有公共中间件的路由进行分组:

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
)

func main() {
    // New returns a new blank Engine instance without any middleware attached.
    router := gin.New()

    g1 := router.Group("/")
    {
        // Add the logger middleware to group 1.
        g1.Use(gin.Logger())

        g1.GET("/", gin.HandlerFunc(func(ctx *gin.Context) {
            fmt.Println("FirstHandler")
        }))
    }

    g2 := router.Group("/qwe")
    {
        g2.GET("/", gin.HandlerFunc(func(ctx *gin.Context) {
            fmt.Println("/SecondHandler")
        }))
    }

    router.Run(":8080")
}