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 |
