马提尼酒中处理程序的所谓顺序是什么?
What is the called order of the handlers in martini?
关于golang martini
- 我们可以使用 m.Use() 添加中间件。当然,"Middleware Handlers are invoked in the order that they are added"。
- 此外,还可以通过路由器添加处理程序,例如r.Get("/", handler)。
- 有时,我们还需要在路由器处理程序之后调用处理程序。这是在将内容写入 ResponseWriter 之前调用处理程序。
那么,这些处理程序的呈现顺序是怎样的呢?解决办法是martini的文档。
正如您所说,Martini 和其他中间件的调用顺序是它们定义的顺序:首先是使用 use 添加的中间件,然后是路由中间件,然后是路由处理程序。
这里是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()
调用之前或之后的中间件中添加代码。
关于golang martini
- 我们可以使用 m.Use() 添加中间件。当然,"Middleware Handlers are invoked in the order that they are added"。
- 此外,还可以通过路由器添加处理程序,例如r.Get("/", handler)。
- 有时,我们还需要在路由器处理程序之后调用处理程序。这是在将内容写入 ResponseWriter 之前调用处理程序。
那么,这些处理程序的呈现顺序是怎样的呢?解决办法是martini的文档。
正如您所说,Martini 和其他中间件的调用顺序是它们定义的顺序:首先是使用 use 添加的中间件,然后是路由中间件,然后是路由处理程序。
这里是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()
调用之前或之后的中间件中添加代码。