labstack/echo · warning

route not found

Error message

route not found

What it means

Returned by Routes.Reverse(routeName, pathValues...) when no registered route has the given Name. Reverse walks the route list matching by Name; a miss means the URL cannot be generated. Route names are optional — when unset, ToRouteInfo derives a name from Method:Path, so you must reverse using the name you actually set (or the derived form).

Source

Thrown at route.go:130

}

// Clone creates copy of Routes
func (r Routes) Clone() Routes {
	result := make(Routes, len(r))
	for i, route := range r {
		result[i] = route.Clone()
	}
	return result
}

// Reverse reverses route to URL string by replacing path parameters with given params values.
func (r Routes) Reverse(routeName string, pathValues ...any) (string, error) {
	for _, rr := range r {
		if rr.Name == routeName {
			return rr.Reverse(pathValues...), nil
		}
	}
	return "", errors.New("route not found")
}

// FindByMethodPath searched for matching route info by method and path
func (r Routes) FindByMethodPath(method string, path string) (RouteInfo, error) {
	if r == nil {
		return RouteInfo{}, errors.New("route not found by method and path")
	}

	for _, rr := range r {
		if rr.Method == method && rr.Path == path {
			return rr, nil
		}
	}
	return RouteInfo{}, errors.New("route not found by method and path")
}

// FilterByMethod searched for matching route info by method
func (r Routes) FilterByMethod(method string) (Routes, error) {

View on GitHub (pinned to 05489dc173)

Solutions

  1. Set an explicit Name when registering: e.GET("/users/:id", h).Name = "user.show", then Reverse("user.show", id).
  2. If you did not set Name, use the derived form Method:Path, e.g. "GET:/users/:id".
  3. Check the returned error from Reverse and handle the empty-string fallback rather than passing an empty URL to the client.
  4. Centralise route names as constants to avoid typos between registration and reversal.

Example fix

// before
url, _ := e.Routes().Reverse("user.show", 42) // name mismatch -> error, url==""
// after
e.GET("/users/:id", h).Name = "user.show"
url, err := e.Routes().Reverse("user.show", 42)
if err != nil { /* handle missing route */ }
Defensive patterns

Strategy: validation

Validate before calling

func mustReverse(routes echo.Routes, name string, vals ...any) (string, error) {
    if routes == nil {
        return "", errors.New("no routes registered")
    }
    url, err := routes.Reverse(name, vals...)
    if err != nil {
        return "", fmt.Errorf("reverse: %w", err)
    }
    return url, nil
}

Prevention

When it happens

Trigger: Calling e.Routes().Reverse("user.show", id) when no route was registered with Name "user.show" (e.g., you forgot r.Name = "user.show" at registration, or the name is misspelled).

Common situations: Refactor renames a route's Name but not the Reverse callers; typo in the name string; or reversing before the route is registered (e.g., during package init).

Related errors


AI-assisted analysis of labstack/echo@05489dc173 (2026-08-04). Data as JSON: /data/errors/3647a65180a91450.json. Report an issue: GitHub.