2016-01-06 40 views
0

關於golang馬提尼馬提尼處理程序的調用順序是什麼?

  • 我們可以添加使用m.Use中間件()。當然,「中間件處理程序按照它們添加的順序被調用」。
  • 此外,處理程序也可以通過路由器添加,如r.Get(「/」,handler)。
  • 有時,我們還需要在路由器處理程序之後調用一個處理程序。這是一個處理程序在寫入ResponseWriter之前調用。

那麼,這些處理程序的演示順序如何?我無法得到解決方案是馬丁尼的文件。

+0

路由器處理程序應該寫入ResponseWriter。因此,在路由寫入之前需要一箇中間件來訪問ResponseWriter。我會建議negroni(https://github.com/codegangsta/negroni)來處理更多的慣用中間件。 – SnoProblem

+0

馬提尼現在被遺棄。試試杜松子酒 –

回答

1

正如你所說的,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()之前或之後的中間件中添加代碼。

相關問題