mirror of
https://github.com/gofiber/fiber.git
synced 2025-05-31 11:52:41 +00:00
fix removing logic
This commit is contained in:
parent
8fca96d718
commit
9c10d0d99e
46
router.go
46
router.go
@ -338,7 +338,6 @@ func (app *App) register(methods []string, pathRaw string, group *Group, handler
|
||||
if pathRaw[0] != '/' {
|
||||
pathRaw = "/" + pathRaw
|
||||
}
|
||||
|
||||
pathPretty := pathRaw
|
||||
if !app.config.CaseSensitive {
|
||||
pathPretty = utils.ToLower(pathPretty)
|
||||
@ -346,10 +345,11 @@ func (app *App) register(methods []string, pathRaw string, group *Group, handler
|
||||
if !app.config.StrictRouting && len(pathPretty) > 1 {
|
||||
pathPretty = utils.TrimRight(pathPretty, '/')
|
||||
}
|
||||
|
||||
pathClean := RemoveEscapeChar(pathPretty)
|
||||
|
||||
parsedRaw := parseRoute(pathRaw, app.customConstraints...)
|
||||
parsedPretty := parseRoute(pathPretty, app.customConstraints...)
|
||||
|
||||
isMount := group != nil && group.app != app
|
||||
|
||||
for _, method := range methods {
|
||||
@ -457,32 +457,28 @@ func (app *App) deleteRoute(methods []string, matchFunc func(r *Route) bool) {
|
||||
continue // Skip invalid HTTP methods
|
||||
}
|
||||
|
||||
for i, route := range app.stack[m] {
|
||||
if matchFunc(route) {
|
||||
// Remove route from stack
|
||||
if i+1 < len(app.stack[m]) {
|
||||
fmt.Println("a")
|
||||
app.stack[m] = append(app.stack[m][:i], app.stack[m][i+1:]...)
|
||||
} else {
|
||||
fmt.Println("b")
|
||||
app.stack[m] = app.stack[m][:i]
|
||||
}
|
||||
app.routesRefreshed = true
|
||||
|
||||
// Decrement global handler count. In middleware routes, only decrement once
|
||||
if _, ok := removedUseRoutes[route.path]; (route.use && slices.Equal(methods, app.config.RequestMethods) && !ok) || !route.use {
|
||||
if route.use {
|
||||
removedUseRoutes[route.path] = struct{}{}
|
||||
}
|
||||
atomic.AddUint32(&app.handlersCount, ^uint32(len(route.Handlers)-1)) //nolint:gosec // Not a concern
|
||||
}
|
||||
|
||||
// Decrement global route count
|
||||
atomic.AddUint32(&app.routesCount, ^uint32(0)) //nolint:gosec // Not a concern1
|
||||
for i := len(app.stack[m]) - 1; i >= 0; i-- {
|
||||
route := app.stack[m][i]
|
||||
if !matchFunc(route) {
|
||||
continue // Skip if route does not match
|
||||
}
|
||||
|
||||
app.stack[m] = append(app.stack[m][:i], app.stack[m][i+1:]...)
|
||||
app.routesRefreshed = true
|
||||
|
||||
// Decrement global handler count. In middleware routes, only decrement once
|
||||
if _, ok := removedUseRoutes[route.path]; (route.use && slices.Equal(methods, app.config.RequestMethods) && !ok) || !route.use {
|
||||
if route.use {
|
||||
removedUseRoutes[route.path] = struct{}{}
|
||||
}
|
||||
|
||||
atomic.AddUint32(&app.handlersCount, ^uint32(len(route.Handlers)-1)) //nolint:gosec // Not a concern
|
||||
}
|
||||
|
||||
// Decrement global route count
|
||||
atomic.AddUint32(&app.routesCount, ^uint32(0)) //nolint:gosec // Not a concern1
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (app *App) addRoute(method string, route *Route, isMounted ...bool) {
|
||||
|
@ -813,10 +813,15 @@ func TestRemoveRoute(t *testing.T) {
|
||||
app.RemoveRoute("/test", MethodGet)
|
||||
app.RebuildTree()
|
||||
|
||||
routes := app.GetRoutes()
|
||||
for _, route := range routes {
|
||||
fmt.Printf("%s %s\n", route.Method, route.Path)
|
||||
}
|
||||
req, err = http.NewRequest(MethodGet, "/test", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp, err = app.Test(req)
|
||||
require.NoError(t, err)
|
||||
|
||||
buf.Reset()
|
||||
|
||||
require.Equal(t, StatusMethodNotAllowed, resp.StatusCode)
|
||||
|
||||
require.Equal(t, uint32(4), app.handlersCount)
|
||||
require.Equal(t, uint32(19), app.routesCount)
|
||||
@ -837,7 +842,7 @@ func TestRemoveRoute(t *testing.T) {
|
||||
fmt.Println(string(body))
|
||||
|
||||
require.Equal(t, 404, resp.StatusCode)
|
||||
require.Equal(t, "13", buf.String())
|
||||
require.Equal(t, "1", buf.String())
|
||||
|
||||
buf.Reset()
|
||||
|
||||
@ -848,14 +853,14 @@ func TestRemoveRoute(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 404, resp.StatusCode)
|
||||
require.Equal(t, "13", buf.String())
|
||||
require.Equal(t, "1", buf.String())
|
||||
|
||||
buf.Reset()
|
||||
|
||||
app.RemoveRoute("/", MethodGet, MethodPost)
|
||||
|
||||
require.Equal(t, uint32(2), app.handlersCount)
|
||||
require.Equal(t, uint32(18), app.routesCount)
|
||||
require.Equal(t, uint32(14), app.routesCount)
|
||||
|
||||
req, err = http.NewRequest(MethodGet, "/", nil)
|
||||
require.NoError(t, err)
|
||||
@ -864,14 +869,19 @@ func TestRemoveRoute(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 404, resp.StatusCode)
|
||||
require.Equal(t, "1", buf.String())
|
||||
require.Equal(t, "", buf.String())
|
||||
|
||||
buf.Reset()
|
||||
|
||||
app.RemoveRoute("/test", MethodGet, MethodPost)
|
||||
|
||||
require.Equal(t, uint32(2), app.handlersCount)
|
||||
require.Equal(t, uint32(16), app.routesCount)
|
||||
require.Equal(t, uint32(14), app.routesCount)
|
||||
|
||||
app.RemoveRoute("/test", app.config.RequestMethods...)
|
||||
|
||||
require.Equal(t, uint32(1), app.handlersCount)
|
||||
require.Equal(t, uint32(7), app.routesCount)
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user