🐛 bug: fix mounting when mount prefix is `/` (#2227)

pull/2237/head
M. Efe Çetin 2022-11-20 16:26:42 +03:00 committed by GitHub
parent 82db2963be
commit 291fb6e444
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 6 deletions

View File

@ -44,8 +44,10 @@ func (app *App) Mount(prefix string, fiber *App) Router {
// Support for configs of mounted-apps and sub-mounted-apps
for mountedPrefixes, subApp := range fiber.mountFields.appList {
subApp.mountFields.mountPath = prefix + mountedPrefixes
app.mountFields.appList[prefix+mountedPrefixes] = subApp
path := getGroupPath(prefix, mountedPrefixes)
subApp.mountFields.mountPath = path
app.mountFields.appList[path] = subApp
}
// Execute onMount hooks
@ -68,8 +70,10 @@ func (grp *Group) Mount(prefix string, fiber *App) Router {
// Support for configs of mounted-apps and sub-mounted-apps
for mountedPrefixes, subApp := range fiber.mountFields.appList {
subApp.mountFields.mountPath = groupPath + mountedPrefixes
grp.app.mountFields.appList[groupPath+mountedPrefixes] = subApp
path := getGroupPath(groupPath, mountedPrefixes)
subApp.mountFields.mountPath = path
grp.app.mountFields.appList[path] = subApp
}
// Execute onMount hooks
@ -105,7 +109,7 @@ func (app *App) appendSubAppLists(appList map[string]*App, parent ...string) {
}
if len(parent) > 0 {
prefix = parent[0] + prefix
prefix = getGroupPath(parent[0], prefix)
}
if _, ok := app.mountFields.appList[prefix]; !ok {
@ -129,7 +133,7 @@ func (app *App) addSubAppsRoutes(appList map[string]*App, parent ...string) {
}
if len(parent) > 0 {
prefix = parent[0] + prefix
prefix = getGroupPath(parent[0], prefix)
}
// add routes

View File

@ -29,6 +29,25 @@ func Test_App_Mount(t *testing.T) {
utils.AssertEqual(t, uint32(2), app.handlersCount)
}
func Test_App_Mount_RootPath_Nested(t *testing.T) {
app := New()
dynamic := New()
apiserver := New()
apiroutes := apiserver.Group("/v1")
apiroutes.Get("/home", func(c *Ctx) error {
return c.SendString("home")
})
dynamic.Mount("/api", apiserver)
app.Mount("/", dynamic)
resp, err := app.Test(httptest.NewRequest(MethodGet, "/api/v1/home", nil))
utils.AssertEqual(t, nil, err, "app.Test(req)")
utils.AssertEqual(t, 200, resp.StatusCode, "Status code")
utils.AssertEqual(t, uint32(2), app.handlersCount)
}
// go test -run Test_App_Mount_Nested
func Test_App_Mount_Nested(t *testing.T) {
app := New()