Write the Code. Change the World.

11月 19

上一篇,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 下处理也是可以的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注