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 |