中间件处理器

中间件处理器是工作于请求和路由之间的. 本质上来说和Martini其他的处理器没有分别. 你可以像如下这样添加一个中间件处理器到它的堆中:

  1. m.Use(func() {
  2. // 做一些中间件该做的事情
  3. })

你可以通过Handlers函数对中间件堆有完全的控制. 它将会替换掉之前的任何设置过的处理器:

  1. m.Handlers(
  2. Middleware1,
  3. Middleware2,
  4. Middleware3,
  5. )

中间件处理器可以非常好处理一些功能,像logging(日志), authorization(授权), authentication(认证), sessions(会话), error pages(错误页面), 以及任何其他的操作需要在http请求发生之前或者之后的:

  1. // 验证api密匙
  2. m.Use(func(res http.ResponseWriter, req *http.Request) {
  3. if req.Header.Get("X-API-KEY") != "secret123" {
  4. res.WriteHeader(http.StatusUnauthorized)
  5. }
  6. })

Next()

Context.Next()是一个可选的函数用于中间件处理器暂时放弃执行直到其他的处理器都执行完毕. 这样就可以很好的处理在http请求完成后需要做的操作.

  1. // log 记录请求完成前后 (*译者注: 很巧妙,掌声鼓励.)
  2. m.Use(func(c martini.Context, log *log.Logger){
  3. log.Println("before a request")
  4.  
  5. c.Next()
  6.  
  7. log.Println("after a request")
  8. })