尽管gin路由器使用了gin中间件,但似乎仍未调用的问题

时间:2019-07-13 17:10:11

标签: go middleware gin

我有一个简单的DbSession中间件,将* db.SQL值设置为“ db”的上下文键。我在路由器中添加了该中间件的实例,但是在处理请求时,上下文的键中不存在“ db”键。

我已将日志记录添加到中间件,并且可以验证该中间件是否从未被调用,即使已通过Use()添加到路由器中也是如此。我还检查了上下文键,但在那里没有看到我的“ db”键。

这是我的中间件。

// DbSession returns a gin middleware adding the database connection to the request context.
func DbSession(db *sql.DB) gin.HandlerFunc {
    return func(c *gin.Context) {
        fmt.Println("inside DbSession middleware")
        c.Set("db", db)
        c.Next()
    }
}

这就是将它添加到我的main()函数中的方式。

var db *sql.DB

func main() {
    initEnv()

    initDb()
    defer db.Close()

    r := InitRouter()
    r.Use(DbSession(db))

    _ = r.Run()
}

在我的处理程序中,我尝试检索它。

func GetProfile(c *gin.Context) {
    // ...

    // Get our db session from the request context.
    db := c.MustGet("db").(*sql.DB)

    // ...
}

当访问端点时,我希望上下文具有'db'键及其关联的* sql.DB值。相反,我感到以下恐慌。

[GIN-debug] Listening and serving HTTP on :8080
2019/07/13 11:45:05 http: panic serving [::1]:55014: Key "db" does not exist

这似乎是一个微不足道的示例,我希望它能成为“ Just Work(tm)”。我认为这一定是我忽略的真正琐碎的事情。任何见解都将不胜感激。

0 个答案:

没有答案