gin中如何自定义中间件

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	// 新建一个没有任何默认中间件的路由
	router := gin.New()

	// Logger 中间件将日志写入 gin.DefaultWriter,即使你讲GIN.MODE设置为release
	// gin.DefaultWriter io.Writer = os.Stdout
	router.Use(gin.Logger())

	// Recovery 中间件会 recover 任何 panic,如果有panic的话,会写入500
	router.Use(gin.Recovery())

	// 使用自定义的中间件
	router.Use(RequestInfos())
	router.Use(RequestInfos2())
	router.Use(func(context *gin.Context) {
		url := context.Request.URL
		fmt.Println(url)
	})

	router.GET("/json", func(context *gin.Context) {
		context.JSON(200, "OK")
	})

	router.Run()
}

func RequestInfos() gin.HandlerFunc {
	return func(context *gin.Context) {
		path := context.FullPath()
		method := context.Request.Method
		fmt.Printf("path: %s, method: %s\n", path, method)
		context.Next()
		fmt.Println(context.Writer.Status())
	}
}

func RequestInfos2() gin.HandlerFunc {
	return func(context *gin.Context) {
		fmt.Println("requestInfo2执行了")
	}
}

/* 显示RequestInfos中的第一个print打印,然后RequestInfos2的print打印
   然后再回到RequestInfos中的context.Next()下面继续执行,最后输出日志信息
path: /json, method: GET
requestInfo2执行了
/json
200
[GIN] 2021/10/22 - 14:32:19 | 200 |            0s |             ::1 | GET      "/json"
*/

  

posted @ 2021-10-22 15:30  专职  阅读(222)  评论(0编辑  收藏  举报