go iris分组路由和中间件


package main

import (
	"github.com/kataras/iris/v12"
)

func main() {
	// 1.创建实例
	app := iris.New()

	// 2.设置错误等级
	//app.Logger().SetLevel("debug")

	// 3.注册模板
	htmlEngine := iris.HTML("./web/views", ".html") // 从./web/views目录下加载所有以.html为后缀文件,并解析他们
	htmlEngine.Layout("shared/layout.html")         // 相当于组成页面的框架html,其他模板填充进该layout
	htmlEngine.Reload(true)                         // 每次重新加载模板
	app.RegisterView(htmlEngine)                    // 注册该模板

	// 4.设置静态文件目录
	app.HandleDir("/public", "./public/") // 外网访问/public文件就是访问web.exe同级目录下public下文件

	// 5.设置异常页面
	app.OnAnyErrorCode(func(ctx iris.Context) { // 自定义错误,错误码在100~511自动触发
		ctx.ViewData("message", ctx.Values().GetStringDefault("message", "访问页面出错")) // 绑定数据
		ctx.ViewLayout("shared/layout.html")
		ctx.View("shared/error.html")
	})

	// 6.注册控制器
	app.Use(bigbefore)	// 全局before
	app.Done(bigafter)	// 全局after
	app.UseGlobal(global)
	users := app.Party("/user", middleHandlerUser)   // user组,访问该组下路由都会触发middleHandlerUser方法
	users.Use(b)                                     // user组的前置函数,在middleHandlerUser之后执行
	users.Done(a)                                   // user组的后置函数
	users.Get("", routeUser)                         // http://127.0.0.1:8080/user
	users.Get("/test", before, routeUserTest, after) // http://127.0.0.1:8080/user/test 依次执行 before, routeUserTest, after 方法
	users.Get("/user/test", routeUserUserTest)       // http://127.0.0.1:8080/user/user/test

	test := app.Party("/test") // 不使用middleHandlerUser
	test.Get("", routeTest)    // http://127.0.0.1:8080/test

	// 7.启动服务
	app.Run(iris.Addr(":8080"))
}

func global(ctx iris.Context) {
	ctx.HTML("global | ")
	ctx.Next()
}

func b(ctx iris.Context) {
	ctx.HTML("user组before | ")
	ctx.Next()
}

func a(ctx iris.Context) {
	ctx.HTML("user组after | ")
	ctx.Next()
}

func middleHandlerUser(ctx iris.Context) {
	ctx.HTML("user组middleHandler | ")
	ctx.Next()
}

func routeUserUserTest(ctx iris.Context) {
	ctx.WriteString("/user/user/test | ")
	ctx.Next()
}

func routeUser(ctx iris.Context) {
	ctx.WriteString("/user | ")
	ctx.Next()
}

func routeUserTest(ctx iris.Context) {
	ctx.WriteString("/user/test | ")
	ctx.Next()
}

func before(ctx iris.Context) {
	ctx.WriteString("我是/user/test的before方法 | ")
	ctx.Next()
}

func after(ctx iris.Context) {
	ctx.WriteString("我是/user/test的after方法 | ")
	ctx.Next()
}

func routeTest(ctx iris.Context) {
	ctx.WriteString("/test | ")
	ctx.Next()
}

func bigbefore(ctx iris.Context) {
	ctx.WriteString("我是bigbefore | ")
	ctx.Next()
}

func bigafter(ctx iris.Context) {
	ctx.WriteString("我是bigafter | ")
	ctx.Next()
}

 

结果:

http://127.0.0.1:8080/user

global | 我是bigbefore | user组middleHandler | user组before | /user | 我是bigafter | user组after |
 
http://127.0.0.1:8080/user/test
global | 我是bigbefore | user组middleHandler | user组before | 我是/user/test的before方法 | /user/test | 我是/user/test的after方法 | 我是bigafter | user组after |
 
http://127.0.0.1:8080/user/user/test
global | 我是bigbefore | user组middleHandler | user组before | /user/user/test | 我是bigafter | user组after |

http://127.0.0.1:8080/test

global | 我是bigbefore | /test | 我是bigafter |

  

注意:路由组内部的 app.Done 方法会最晚执行,比全局的 app.Done 方法更晚执行

 

 

mvc方法

app.Use(bigbefore)	         // 全局Use
app.Done(bigafter)	         // 全局Done
app.UseGlobal(useGlobal)	    // 全局UseGlobal
mvc.Configure(app.Party("/"), config) // 路由分组

 

func groupBefore(ctx iris.Context) {
	ctx.HTML("小组Use | ")
	ctx.Next()
}

func groupAfter(ctx iris.Context) {
	ctx.HTML("小组Done | ")
	ctx.Next()
}

func useGlobal(ctx iris.Context) {
	ctx.HTML("全局UseGlobal | ")
	ctx.Next()
}

func bigbefore(ctx iris.Context) {
	ctx.WriteString("全局Use | ")
	ctx.Next()
}

func bigafter(ctx iris.Context) {
	ctx.WriteString("全局Done | ")
	ctx.Next()
}

  

func config(app *mvc.Application) {
	app.Router.Use(groupBefore)	// 小组前置
	app.Router.Done(groupAfter)	// 小组后置
	app.Handle(new(controllers.IndexController))
}

controller

package controllers

import (
	"github.com/kataras/iris/v12"
)

type IndexController struct {
	Ctx iris.Context
}

func (c *IndexController)Get() {
	c.Ctx.HTML("/ | ")
	c.Ctx.Next()
}

结果:

全局UseGlobal | 全局Use | 小组Use | / | 全局Done | 小组Done |

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM