如果同时使用基于 http.handler 的中间件和 gin 的中间件,请求处理的顺序是怎样的?

AI摘要
用户分享了一个结合Gin框架和SCS会话管理的Go代码实现,但认为当前方案不够优雅。核心诉求是寻求更优化的方法,在保持SCS的LoadAndSave机制前提下改进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。

gin
讨论数量: 3

没毛病啊,这个就是很好的例子了啊。 有问题吗?中间件顺序就是gin的执行顺序

8小时前 评论
shendaowu (楼主) 6小时前
deatil (作者) 6小时前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!