MVC中使用中间件 taro Posted on Apr 4 2021 Golang iris # 中间件实例 ```go func before(ctx iris.Context) { shareInformation := "this is a sharable information between handlers" requestPath := ctx.Path() println("Before the mainHandler: " + requestPath) ctx.Values().Set("info", shareInformation) ctx.Next() //继续执行下一个handler,在本例中是mainHandler。 } ``` # 分组路由 ## 匿名函数 ```go mvc.Configure(app.Party("/user"), func(m *mvc.Application) { m.Router.Use(cache.Handler(10*time.Second)) }) ``` ## 直接使用 ```go userRouter := app.Party("/user") userRouter.Use(cache.Handler(10*time.Second)) mvc.Configure(userRouter, ...) ``` ```go userRouter := app.Party("/user", cache.Handler(10*time.Second)) mvc.Configure(userRouter, ...) ``` # 单个路由 ```go var myMiddleware := myMiddleware.New(...) //返回一个iris/context.Handler类型 type UserController struct{} func (c *UserController) GetSomething(ctx iris.Context) { // ctx.Proceed检查myMiddleware是否调用`ctx.Next()` //在其中,如果是,则返回true,否则返回false。 nextCalled := ctx.Proceed(myMiddleware) if !nextCalled { return } //其他工作,这在这里执行是允许的 } ``` ```go type exampleController struct{} func (c *exampleController) AfterActivation(a mvc.AfterActivation) { //根据您想要的方法名称选择路由 修改 index := a.GetRoute("Get") //只是将处理程序作为您想要使用的中间件预先添加。 //或附加“done”处理程序。 index.Handlers = append([]iris.Handler{cacheHandler}, index.Handlers...) } func (c *exampleController) Get() string { //每隔10秒刷新一次,你会看到不同的时间输出。 now := time.Now().Format("Mon, Jan 02 2006 15:04:05") return "last time executed without cache: " + now } ``` 路由 控制器