Gin: Pergunta sobre middleware

Criado em 13 nov. 2017  ·  3Comentários  ·  Fonte: gin-gonic/gin

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

Comentários muito úteis

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.

Todos 3 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

kekemuyu picture kekemuyu  ·  3Comentários

olegsobchuk picture olegsobchuk  ·  3Comentários

atifzia picture atifzia  ·  3Comentários

lilee picture lilee  ·  3Comentários

ccaza picture ccaza  ·  3Comentários