Go

Golang Echo RemoveTrailingSlashを使った際のGroupについて注意

2018年12月22日

注意すること

RemoveTrailingSlashを使ったGroupのルーティングの設定でハマったので記載いておきます。

RemoveTrailingSlashとは

URIの末尾のスラッシュを削除します。

ハマった内容

http://[ホスト]/a/b/c/とURIの構造があり、aを共通化をしようとした。

もともと末尾の削除をしていたが、aを共通化するためにはGroup関数を利用する事で、対応が可能とわかりました。

/a/bをGroupにネストした状態を入れると動かないのでハマりました。

失敗例

うまくいかなかったコードを記載します。

func main() {
        e := echo.New
        e.Pre(middleware.RemoveTrailingSlash())

        ab := e.Group("/a/b")
        ab.GET("", func ...)
}

実際アクセスすると、NotFound扱いになる。

調べるとGroupに複数階層を指定しているのが間違いだった。

成功例

成功したコードです。

func main() {
        e := echo.New
        e.Pre(middleware.RemoveTrailingSlash())

        a := e.Group("/a")
        b := a.Group("/b")
        b.GET("", func ...)
}

Groupを分けて階層を確保する。

まとめ

RemoveTrailingSlashを外すと、失敗例でも動きます。

RemoveTrailingSlashを含めた場合は、成功例のようにGroupを分ける事でルーティングがうまく動く。

あとGET("")で何も指定していないのは、/を指定するとhttp://[ホスト]/a/b//になってしまうためで、それを除外しています。

もっと良い方法があると思いますが、調査中です。

-Go
-,