+++
title = “概述”
url = “/middleware/overview”
[menu.side]
name = “概述”
parent = “middleware”
weight = 1
+++

中间件

中间件是一个函数,嵌入在HTTP 的请求和响应之间。它可以获得 Echo#Context 对象用来进行一些特殊的操作,
比如记录每个请求或者统计请求数。

Action的处理在所有的中间件运行完成之后。

中间件级别

Root Level (Before router)

Echo#Pre() 用于注册一个在路由执行之前运行的中间件,可以用来修改请求的一些属性。比如在请求路径结尾添加或者删除一个’/‘来使之能与路由匹配。

下面的这几个内建中间件应该被注册在这一级别:

  • AddTrailingSlash
  • RemoveTrailingSlash
  • MethodOverride

注意: 由于在这个级别路由还没有执行,所以这个级别的中间件不能调用任何 echo.Context 的 API。

Root Level (After router)

大部分时间你将用到 Echo#Use() 在这个级别注册中间件。
这个级别的中间件运行在路由处理完请求之后,可以调用所有的 echo.Context API。

下面的这几个内建中间件应该被注册在这一级别:

  • BodyLimit
  • Logger
  • Gzip
  • Recover
  • BasicAuth
  • JWTAuth
  • Secure
  • CORS
  • Static

Group Level

当在路由中创建一个组的时候,可以为这个组注册一个中间件。例如,给 admin 这个组注册一个 BasicAuth 中间件。

用法

  1. e := echo.New()
  2. admin := e.Group("/admin", middleware.BasicAuth())

也可以在创建组之后用 admin.Use()注册该中间件。

Route Level

当你创建了一个新的路由,可以选择性的给这个路由注册一个中间件。

用法

  1. e := echo.New()
  2. e.GET("/", <Handler>, <Middleware...>)