はじめに
Echoでルーティングをグループ化して、それに対してミドルウェアを追加するのにはどうやってやるのだろうと疑問に思ったので、調べてみました。
コード
まず、/admin以下をグループ化するために、g := e.Group("/admin") を追加。
またさらにadminの中でもグループ化したい場合は、g2 := g.Group("/users")と書く。
そして、グループ化の宣言の後にミドルウェアを追加してやる。
package main
import (
"log"
"github.com/labstack/echo/v4"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, World!")
})
g := e.Group("/admin")
// ログミドルウェアを追加
g.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
log.Printf("Admin Middleware")
return next(c)
}
})
g.GET("/dashboard", func(c echo.Context) error {
return c.String(200, "Admin Dashboard")
})
g.GET("/settings", func(c echo.Context) error {
return c.String(200, "Admin Settings")
})
g2 := g.Group("/users")
// ログミドルウェアを追加
g2.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
log.Printf("Admin Users Middleware")
return next(c)
}
})
g2.GET("/list", func(c echo.Context) error {
return c.String(200, "User List")
})
g2.GET("/create", func(c echo.Context) error {
return c.String(200, "User Create")
})
e.Logger.Fatal(e.Start(":8080"))
}
動かしてみる
curl http://localhost:8080/admin/dashboard
Admin Dashboard%
2024/07/12 10:08:28 Admin Middleware
users以下にアクセスすると、adminとusersの両方のミドルウェアが適用される。
curl http://localhost:8080/admin/users/list
Admin Users List%
2024/07/12 10:10:22 Admin Middleware
2024/07/12 10:10:22 Admin Users Middleware