上一篇,iris mvc 之路由中搞定了路由的映射。下边就好好规划下分组。因为有的时候,一个服务不仅仅有网站,还会有接口。通常,这两边的路由是分开规划的。
操作一波
依照 laravel 的习惯,我们在项目目录下,新建 routes 文件夹,然后里边新建两个 go 文件。
mkdir routes
# 用来处理 web 站点的
touch routes/web.go
# 用来处理接口的
touch routes/api.go
依照 iris mvc 之路由(一) 的逻辑。 main.go 修改如下。
package main
import (
"favor/routes"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/mvc"
)
func main() {
app := iris.New()
mvc.Configure(app.Party("/api"), routes.RegisterApiRoutes)
app.Run(iris.Addr(":8080"))
}
然后 routes/api.go 中,注入下边的代码。
package routes
import (
"favor/app/http/controllers/api"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/mvc"
)
func RegisterApiRoutes(app *mvc.Application) {
app.Router.Use(func(ctx iris.Context) {
ctx.Application().Logger().Infof("Path: %s", ctx.Path())
ctx.Next()
})
app.Party("/user").Handle(new(api.UserController))
}
最后,将原来的 user_controller 移动到 app/http/controllers/api 下,并将 package 名改为 api。
package api
import (
. "fmt"
"github.com/kataras/iris/v12/mvc"
)
type UserController struct {
}
func (c *UserController) BeforeActivation(b mvc.BeforeActivation) {
Println("BeforeActivation")
b.Handle("GET", "/permissions", "GetPermissions")
}
func (c *UserController) AfterActivation(a mvc.AfterActivation) {
Println("AfterActivation")
}
func (c *UserController) GetPermissions() string {
return "getPermissions"
}
func (c *UserController) Get() string {
return "get"
}
到此,已经处理完毕,可以 run 起来了。
postman 请求的效果,和上一篇一样。
当然,你可以在 main 中一点都不做 route 的处理,可以单独在 routes 下处理也是可以的。