mirror of https://github.com/gofiber/fiber.git
🐛 bug: fix mounting when mount prefix is `/` (#2227)
parent
82db2963be
commit
291fb6e444
16
mount.go
16
mount.go
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue