GoFrame
提供了优雅的中间件请求控制方式,该方式也是主流的 WebServer
提供的请求流程控制方式,基于中间件设计可以为 WebServer
提供更灵活强大的插件机制。经典的中间件洋葱模型:
中间件定义
中间件的定义和普通HTTP执行方法 HandlerFunc
一样,但是可以在 Request
参数中使用 Middleware
属性对象来控制请求流程。
我们拿一个跨域请求的中间件定义来示例说明一下:
func MiddlewareCORS(r *ghttp.Request) {
r.Response.CORSDefault()
r.Middleware.Next()
}
可以看到在该中间件中执行完成跨域请求处理的逻辑后,使用 r.Middleware.Next()
方法进一步执行下一个流程;如果这个时候直接退出不调用 r.Middleware.Next()
方法的话,将会退出后续的执行流程(例如可以用于请求的鉴权处理)。
中间件类型
中间件的类型分为两种:前置中间件和后置中间件。前置即在路由服务函数调用之前调用,后置即在其后调用。
前置中间件
其定义类似于:
func Middleware(r *ghttp.Request) {
// 中间件处理逻辑
r.Middleware.Next()
}