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")
}
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
Komentar yang paling membantu
Ada contoh permintaan sebelum/sesudah di README.md. Dalam
c.Next()
, ia menggunakan properti konteksindex
untuk merekam penangan apa yang sedang berjalan. Jika Anda ingin menjalankan kodeafter
, tambahkan saja setelahc.Next()
seperti jawaban sebelumnya, atau daftarkan sebagai pengendali terakhir. Tanda tangan metoderoutergroup.GET
adalahfunc (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
, jadi Anda dapat mendaftarkan penangan denganGET("/", h1, h2, afterHandler)
. Semua handler ditambahkan ke dalam sebuah irisan dan dieksekusi di urutan pertama keluar pertama.