如果同时使用基于 http.handler 的中间件和 gin 的中间件,请求处理的顺序是怎样的?
下面是代码:
package main
import (
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/alexedwards/scs/v2"
)
var sessionManager *scs.SessionManager
func main() {
sessionManager = scs.New()
sessionManager.Lifetime = 24 * time.Hour
router := gin.Default()
router.Use(getSessionInMiddleware())
router.GET("/put", putHandler)
router.GET("/get", getHandler)
http.ListenAndServe(":4000", sessionManager.LoadAndSave(router))
}
func getSessionInMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
uid := sessionManager.GetString(c.Request.Context(), "uid")
fmt.Printf("%s\n", uid)
c.Next()
}
}
func putHandler(c *gin.Context) {
sessionManager.Put(c.Request.Context(), "uid", "42")
}
func getHandler(c *gin.Context) {
uid := sessionManager.GetString(c.Request.Context(), "uid")
c.String(http.StatusOK, uid)
}
我觉得这个方法不够优雅。有没有更好的实现这个功能的方法?就是同时使用 gin 和 scs,并且使用 scs 中的 LoadAndSave。
推荐文章: