Olá a todos, gostaria de perguntar se é possível definir o middleware após a execução do manipulador.
Porque no exemplo de código eu forneço middleware "depois" não funciona. Por favor me diga se eu faço algo
errado
package main
import (
"github.com/gin-gonic/gin"
"fmt"
)
func middleware(t string) func(c *gin.Context) {
return func(c *gin.Context) {
fmt.Println(t)
}
}
func handler(c *gin.Context) {
fmt.Println("handler")
}
func main() {
router := gin.Default()
v1 := router.Group("/v1")
v1.Use(middleware("before handler"))
v1.GET("/", handler)
# this middleware does not execute after handler
v1.Use(middleware("after"))
router.Run(":3001")
}
Sim, depois que a execução funcionar, mas não da maneira que você fez :)
func before() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("before")
c.Next()
}
}
func after() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next()
fmt.Println("after")
}
}
Como você pode ver, tudo depende da colocação da linha c.Next()
.
Há um exemplo de solicitação antes / depois em README.md. Em c.Next()
, ele usa index
propriedade de contexto para registrar qual manipulador está executando. Se você quiser executar seus códigos after
, basta adicioná-los após c.Next()
como a resposta anterior ou registrá-lo como o manipulador final. A assinatura do método routergroup.GET
é func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
, então você pode registrar manipuladores por GET("/", h1, h2, afterHandler)
. Todos os manipuladores são anexados a uma fatia e executados primeiro na ordem de saída.
Isso funciona para mim, obrigado pessoal
Comentários muito úteis
Há um exemplo de solicitação antes / depois em README.md. Em
c.Next()
, ele usaindex
propriedade de contexto para registrar qual manipulador está executando. Se você quiser executar seus códigosafter
, basta adicioná-los apósc.Next()
como a resposta anterior ou registrá-lo como o manipulador final. A assinatura do métodoroutergroup.GET
éfunc (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
, então você pode registrar manipuladores porGET("/", h1, h2, afterHandler)
. Todos os manipuladores são anexados a uma fatia e executados primeiro na ordem de saída.