zoukankan      html  css  js  c++  java
  • Go Iris 中间件

    Iris 中间件

    当我们在 iris 中讨论中间件时,我们讨论的是在HTTP请求生命周期中在主处理程序代码之前和/或之后的运行代码。
    实现中间件功能,有下面这样两种方式:

    方式一:

    我们可以通过按顺序注册多个 handler 的方式来实现中间件的效果:

    package main
    
    import "github.com/kataras/iris"
    
    func main() {
     app := iris.New()
     app.Get("/", before, mainHandler, after)
    
     login := app.Party("/login", loginHandler)
     login.Get("/{name}", loginNameHandler)
    
     app.Run(iris.Addr(":9090"))
    }
    
    func loginNameHandler(ctx iris.Context){
     name := ctx.Params().Get("name")
     println(name)
     ctx.Next()
    }
    
    func loginHandler(ctx iris.Context){
     println("login")
     ctx.Next()
    }
    
    func before(ctx iris.Context){
     println("before")
     ctx.Next() //继续执行下一个handler,这本例中是mainHandler
    }
    
    func mainHandler(ctx iris.Context){
     println("mainHandler")
     ctx.Next()
    }
    
    func after(ctx iris.Context){
     println("after")
     ctx.Next()
    }
    

    访问 localhost:9090/输出结果:

    before
    mainHandler
    after
    

    访问 localhost:9090/login/zhangsan 输出结果:

    login
    zhangsan
    

    方式二(全局中间件):

    我们会注意到,访问 login 路径时的中间件代码并没有被执行。如果希望在全局范围内使用中间件,而不仅仅是针对某一个路径时,可以通过使用 UseDone 方法来为当前域名下的所有路由进行注册

    func main() {
       app := iris.New()
       //注意 Use 和 Done 方法需要写在绑定访问路径的方法之前
    
       //使用 ‘Use’ 方法作为当前域名下所有路由的第一个处理函数
       //而使用 ‘UseGlobal’ 方法注册的中间件,会在包括所有子域名在内的所有路由中执行
       app.Use(UseBefore)
       app.Done(DoneAfter)
    
       app.Get("/", before, mainHandler, after)
       login := app.Party("/login", loginHandler)
       login.Get("/{name}", loginNameHandler)
    
       app.Run(iris.Addr(":9090"))
    }
    
    func UseBefore(ctx iris.Context){
      println("use - before")
       ctx.Next()
    }
    
    func DoneAfter(ctx iris.Context) {
      println("Done - after")
       ctx.Next()
    }
    

    访问 localhost:9090/ 输出结果:

    use - before
    before
    mainHandler
    after
    Done - after
    

    访问 localhost:9090/login/zhangsan 输出结果:

    use - before
    login
    zhangsan
    Done - after
    

    可以看到通过 Use 和 Done 方法注册的中间件都被执行了。

  • 相关阅读:
    2017-2018-1 20155225 《信息安全系统设计基础》第三周学习总结
    2017-2018-1 20155225 《信息安全系统设计基础》第2周课堂实验
    20155225 2017-2018-1 《信息安全系统设计基础》第一周学习总结
    课堂实践——数据库
    20155225 2016-2017-2《Java程序设计》课程总结
    20155225 实验五《网络编程与设计》实验报告
    20155225 实验四《Android程序设计》实验报告
    转载
    HDU
    SCU
  • 原文地址:https://www.cnblogs.com/liyutian/p/10270935.html
Copyright © 2011-2022 走看看