Gin: Pertanyaan tentang middleware

Dibuat pada 13 Nov 2017  ·  3Komentar  ·  Sumber: gin-gonic/gin

Halo semua, saya ingin bertanya apakah mungkin untuk mengatur middleware setelah handler dieksekusi.
Karena dalam contoh kode yang saya berikan middleware "setelah" tidak berfungsi. Tolong beri tahu saya jika saya melakukan sesuatu
salah

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

Komentar yang paling membantu

Ada contoh permintaan sebelum/sesudah di README.md. Dalam c.Next() , ia menggunakan properti konteks index untuk merekam penangan apa yang sedang berjalan. Jika Anda ingin menjalankan kode after , tambahkan saja setelah c.Next() seperti jawaban sebelumnya, atau daftarkan sebagai pengendali terakhir. Tanda tangan metode routergroup.GET adalah func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes , jadi Anda dapat mendaftarkan penangan dengan GET("/", h1, h2, afterHandler) . Semua handler ditambahkan ke dalam sebuah irisan dan dieksekusi di urutan pertama keluar pertama.

Semua 3 komentar

Ya, setelah eksekusi berfungsi, tetapi bukan cara Anda melakukannya :)

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

Seperti yang Anda lihat, semuanya tergantung pada penempatan baris c.Next() .

Ada contoh permintaan sebelum/sesudah di README.md. Dalam c.Next() , ia menggunakan properti konteks index untuk merekam penangan apa yang sedang berjalan. Jika Anda ingin menjalankan kode after , tambahkan saja setelah c.Next() seperti jawaban sebelumnya, atau daftarkan sebagai pengendali terakhir. Tanda tangan metode routergroup.GET adalah func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes , jadi Anda dapat mendaftarkan penangan dengan GET("/", h1, h2, afterHandler) . Semua handler ditambahkan ke dalam sebuah irisan dan dieksekusi di urutan pertama keluar pertama.

Itu bekerja untuk saya terima kasih kawan

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

frederikhors picture frederikhors  ·  3Komentar

mastrolinux picture mastrolinux  ·  3Komentar

nxvl picture nxvl  ·  3Komentar

olegsobchuk picture olegsobchuk  ·  3Komentar

Bloomca picture Bloomca  ·  3Komentar