中间件
基本定义
gin里面本身就有中间件,脚手架里对中间件做了简单的封装
接口定义
type Fairing interface {
OnRequest(*gin.Context) error
OnResponse(result interface{}) (interface{}, error)
}
OnRequest: 执行控制器方法前,修改如头信息、判断参数等等
OnResponse:执行控制器方法后。可以修改返回值内容
创建全局中间件
type TokenCheck struct {}
func NewTokenCheck() *TokenCheck {
return &TokenCheck{}
}
func(this *TokenCheck) OnRequest(ctx *gin.Context) error{
return nil
}
func(this *TokenCheck) OnResponse(result interface{}) (interface{}, error){
return result,nil
}
注意点:两个方法必须都有返回值。
type AddVersion struct {
}
func NewAddVersion() *AddVersion {
return &AddVersion{}
}
func(this *AddVersion) OnRequest(ctx *gin.Context) error{
return nil
}
func(this *AddVersion) OnResponse(result interface{}) (interface{}, error){
if m,ok:=result.(gin.H);ok{
m["version"]="0.3.0"
return m,nil
}
return result,nil
}
注册全局中间件
func main() {
Web.New().
Attach(NewTokenCheck(),NewAddVersion()).
Mount("v1",NewIndexController()).
Launch()
}
注册路由中间件
type CheckVersion struct {
}
func NewCheckVersion() *CheckVersion {
return &CheckVersion {}
}
func(this *CheckVersion) OnRequest(ctx *gin.Context) error{
if ctx.Query("wike")==""{
Web.Throw("wike requred",503,ctx)
}
return nil
}
func(this *CheckVersion) OnResponse(result interface{}) (interface{}, error){
return result,nil
}
type CheckName struct {
}
func NewCheckName() *CheckName {
return &CheckName {}
}
func(this *CheckName ) OnRequest(ctx *gin.Context) error{
if ctx.Query("wike")==""{
Web.Throw("wikerequred",503,ctx)
}
return nil
}
func(this *CheckName ) OnResponse(result interface{}) (interface{}, error){
return result,nil
}
func(this *IndexController) Build(goft *Web.Goft){
goft.HandleWithFairing("GET","/index",this.Index, NewCheckName(),NewCheckVersion()).
最后更新于
这有帮助吗?