ghttp.Server
提供了事件回调注册功能,类似于其他框架的 中间件
功能,相比较于 中间件
,事件回调的特性更加简单。
ghttp.Server
支持用户对于某一事件进行自定义监听处理,按照 pattern
方式进行绑定注册( pattern
格式与路由注册一致)。 支持多个方法对同一事件进行监听, ghttp.Server
将会按照 路由优先级
及 回调注册顺序
进行回调方法调用。同一事件时先注册的HOOK回调函数优先级越高。 相关方法如下:
func (s *Server) BindHookHandler(pattern string, hook string, handler HandlerFunc) error
func (s *Server) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) error
当然域名对象也支持事件回调注册:
func (d *Domain) BindHookHandler(pattern string, hook string, handler HandlerFunc) error
func (d *Domain) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) error
支持的 Hook
事件列表:
ghttp.HookBeforeServe
在进入/初始化服务对象之前,该事件是最常用的事件,特别是针对于权限控制、跨域请求等处理。
ghttp.HookAfterServe
在完成服务执行流程之后。
ghttp.HookBeforeOutput
向客户端输出返回内容之前。
ghttp.HookAfterOutput
向客户端输出返回内容之后。
具体调用时机请参考图例所示。
回调优先级
由于事件的绑定也是使用的路由规则,因此它的优先级和 路由管理-路由规则 章节介绍的优先级是一样的。
但是事件调用时和路由注册调用时的机制不一样, 同一个路由规则下允许绑定多个事件回调方法,该路由下的事件调用会 按照优先级进行调用
,假如优先级相等的路由规则,将会按照事件注册的顺序进行调用。