【问题标题】:What is the called order of the handlers in martini?马提尼中处理程序的调用顺序是什么?
【发布时间】:2016-04-10 21:38:43
【问题描述】:

关于golang马提尼

  • 我们可以使用 m.Use() 添加中间件。当然,“中间件处理程序按添加顺序调用”。
  • 此外,还可以通过路由器添加处理程序,例如 r.Get("/", handler)。
  • 有时,我们还需要在路由器处理程序之后调用处理程序。这是在将某些内容写入 ResponseWriter 之前调用处理程序。

那么,如何排列这些处理程序的呈现顺序?我无法得到解决方案是马提尼的文件。

【问题讨论】:

  • 路由器处理程序应该写入 ResponseWriter。因此,您需要一个中间件在路由写入之前访问 ResponseWriter。我建议使用 negroni (github.com/codegangsta/negroni) 进行更惯用的中间件处理。
  • 马提尼酒现在被放弃了。试试杜松子酒

标签: go martini


【解决方案1】:

正如您所说,Martini 和其他中间件的调用顺序是按定义的顺序调用的:首先是使用添加的中间件,然后是路由中间件,然后是路由处理程序。

这是 martini 文档中给出的中间件示例:

// log before and after a request
m.Use(func(c martini.Context, log *log.Logger){
    log.Println("before a request")

    c.Next()

    log.Println("after a request")
})

据此,如果你有中间件 A 和 B 以及路由 R,那么调用链将是这样的:

func A() {
    // Do things before B

    func B() {
        // Do things before R

        func R() {
            // Do things in R
        } ()

        // Do things after R
    }()

    // Do things after B
}

因此,根据您的需要,您需要在Next() 调用之前或之后在中间件中添加代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2014-11-07
    • 2021-03-20
    • 1970-01-01
    • 2022-10-18
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多