浏览代码

Routes() returns the function name of the main handler

Manu Mtz-Almeida 10 年之前
父节点
当前提交
74fe36fa48
共有 2 个文件被更改,包括 21 次插入13 次删除
  1. 1 1
      debug.go
  2. 20 12
      gin.go

+ 1 - 1
debug.go

@@ -16,7 +16,7 @@ func IsDebugging() bool {
 func debugPrintRoute(httpMethod, absolutePath string, handlers HandlersChain) {
 	if IsDebugging() {
 		nuHandlers := len(handlers)
-		handlerName := nameOfFunction(handlers[nuHandlers-1])
+		handlerName := nameOfFunction(handlers.Last())
 		debugPrint("%-5s %-25s --> %s (%d handlers)\n", httpMethod, absolutePath, handlerName, nuHandlers)
 	}
 }

+ 20 - 12
gin.go

@@ -62,11 +62,20 @@ type (
 	}
 
 	RouteInfo struct {
-		Method string
-		Path   string
+		Method  string
+		Path    string
+		Handler string
 	}
 )
 
+func (c HandlersChain) Last() HandlerFunc {
+	length := len(c)
+	if length > 0 {
+		return c[length-1]
+	}
+	return nil
+}
+
 // Returns a new blank Engine instance without any middleware attached.
 // The most basic configuration
 func New() *Engine {
@@ -176,23 +185,22 @@ func (engine *Engine) addRoute(method, path string, handlers HandlersChain) {
 
 func (engine *Engine) Routes() (routes []RouteInfo) {
 	for _, tree := range engine.trees {
-		for _, path := range iterate("", nil, tree.root) {
-			routes = append(routes, RouteInfo{
-				Method: tree.method,
-				Path: path,
-			})
-		}
+		routes = iterate("", tree.method, routes, tree.root)
 	}
 	return routes
 }
 
-func iterate(path string, routes []string, root *node) []string {
+func iterate(path, method string, routes []RouteInfo, root *node) []RouteInfo {
 	path += root.path
-	if root.handlers != nil {
-		routes = append(routes, path)
+	if len(root.handlers) > 0 {
+		routes = append(routes, RouteInfo{
+			Method:  method,
+			Path:    path,
+			Handler: nameOfFunction(root.handlers.Last()),
+		})
 	}
 	for _, node := range root.children {
-		routes = iterate(path, routes, node)
+		routes = iterate(path, method, routes, node)
 	}
 	return routes
 }