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//になってしまうためで、それを除外しています。
もっと良い方法があると思いますが、調査中です。