IRIS MVC前置中间件使用

目录结构

主目录perMethod

  1. —— main.go

代码示例

main.go

  1. /*
  2. 如果要将其用作整个控制器的中间件
  3. 你可以使用它的路由,它只是一个子路由添加了中间件,就像你通常使用标准API一样:
  4. 我将向您展示将中间件添加到mvc应用程序的4种不同方法,
  5. 所有这4个做同样的事情,选择你喜欢的,
  6. 当我需要在某个地方注册中间件时,我更喜欢最后一个代码片段
  7. 否则我也会选择第一个:
  8. // 1
  9. mvc.Configure(app.Party("/user"), func(m *mvc.Application) {
  10. m.Router.Use(cache.Handler(10*time.Second))
  11. })
  12. // 2
  13. // same:
  14. userRouter := app.Party("/user")
  15. userRouter.Use(cache.Handler(10*time.Second))
  16. mvc.Configure(userRouter, ...)
  17. // 3
  18. userRouter := app.Party("/user", cache.Handler(10*time.Second))
  19. mvc.Configure(userRouter, ...)
  20. // 4
  21. // same:
  22. app.PartyFunc("/user", func(r iris.Party){
  23. r.Use(cache.Handler(10*time.Second))
  24. mvc.Configure(r, ...)
  25. })
  26. 如果要将中间件用于单个路由,
  27. 对于已由引擎注册的单个控制器方法
  28. 而不是自定义`Handle`(你可以添加最后一个参数上的中间件)
  29. 并且它不依赖于`Next Handler`来完成它的工作
  30. 然后你只需在方法上调用它:
  31. var myMiddleware := myMiddleware.New(...) //返回一个iris/context.Handler类型
  32. type UserController struct{}
  33. func (c *UserController) GetSomething(ctx iris.Context) {
  34. // ctx.Proceed检查myMiddleware是否调用`ctx.Next()`
  35. //在其中,如果是,则返回true,否则返回false。
  36. nextCalled := ctx.Proceed(myMiddleware)
  37. if !nextCalled {
  38. return
  39. }
  40. //其他工作,这在这里执行是允许的
  41. }
  42. 最后,如果您想在特定方法上添加中间件
  43. 这取决于下一个和整个链,那么你必须这样做
  44. 像下面的例子一样使用`AfterActivation`:
  45. */
  46. package main
  47. import (
  48. "time"
  49. "github.com/kataras/iris"
  50. "github.com/kataras/iris/cache"
  51. "github.com/kataras/iris/mvc"
  52. )
  53. var cacheHandler = cache.Handler(10 * time.Second)
  54. func main() {
  55. app := iris.New()
  56. //如果你在主函数中完成所有操作,则不必使用.Configure
  57. //mvc.Configure和mvc.New(...).Configure()只是拆分你的代码更好,
  58. //这里我们使用最简单的形式:
  59. m := mvc.New(app)
  60. m.Handle(&exampleController{})
  61. app.Run(iris.Addr(":8080"))
  62. }
  63. type exampleController struct{}
  64. func (c *exampleController) AfterActivation(a mvc.AfterActivation) {
  65. //根据您想要的方法名称选择路由 修改
  66. index := a.GetRoute("Get")
  67. //只是将处理程序作为您想要使用的中间件预先添加。
  68. //或附加“done”处理程序。
  69. index.Handlers = append([]iris.Handler{cacheHandler}, index.Handlers...)
  70. }
  71. func (c *exampleController) Get() string {
  72. //每隔10秒刷新一次,你会看到不同的时间输出。
  73. now := time.Now().Format("Mon, Jan 02 2006 15:04:05")
  74. return "last time executed without cache: " + now
  75. }