go iris分組路由和中介軟體
阿新 • • 發佈:2020-09-20
package main import ( "github.com/kataras/iris/v12" ) func main() { // 1.建立mvc例項 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 方法更晚執行