From f7b01aab1339304a8c4ab7584a9628298bcc836f Mon Sep 17 00:00:00 2001 From: astaxie Date: Tue, 10 Jun 2014 11:02:41 +0800 Subject: [PATCH] beego: modify the filter sequence --- controller.go | 7 ++++--- parser.go | 18 ++++++++++-------- router.go | 19 ++++++++++++------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/controller.go b/controller.go index fe6a2055..d1f19e43 100644 --- a/controller.go +++ b/controller.go @@ -82,7 +82,7 @@ type ControllerInterface interface { Render() error XsrfToken() string CheckXsrfCookie() bool - HandlerFunc(fn string) + HandlerFunc(fn string) bool URLMapping() } @@ -147,11 +147,12 @@ func (c *Controller) Options() { } // call function fn -func (c *Controller) HandlerFunc(fnname string) { +func (c *Controller) HandlerFunc(fnname string) bool { if v, ok := c.methodMapping[fnname]; ok { v() + return true } else { - Error("call funcname not exist in the methodMapping: " + fnname) + return false } } diff --git a/parser.go b/parser.go index 320bef7d..e315f9b4 100644 --- a/parser.go +++ b/parser.go @@ -98,11 +98,6 @@ func parserComments(comments *ast.CommentGroup, funcName, controllerName, pkgpat func genRouterCode() { os.Mkdir(path.Join(AppPath, "routers"), 0755) Info("generate router from comments") - f, err := os.Create(path.Join(AppPath, "routers", "commentsRouter.go")) - if err != nil { - panic(err) - } - defer f.Close() var globalinfo string for k, cList := range genInfoList { for _, c := range cList { @@ -124,9 +119,16 @@ func genRouterCode() { } params = strings.TrimRight(params, ",") + "}" } - globalinfo = globalinfo + fmt.Sprintln(`beego.GlobalControllerRouter["`+k+`"] = &beego.ControllerComments{"`+ - strings.TrimSpace(c.Method)+`", "`+c.Router+`", `+allmethod+", "+params+"}") + globalinfo = globalinfo + fmt.Sprintln(`beego.GlobalControllerRouter["`+k+`"] = append(beego.GlobalControllerRouter["`+k+`"], beego.ControllerComments{"`+ + strings.TrimSpace(c.Method)+`", "`+c.Router+`", `+allmethod+", "+params+"})") } } - f.WriteString(strings.Replace(globalRouterTemplate, "{{.globalinfo}}", globalinfo, -1)) + if globalinfo != "" { + f, err := os.Create(path.Join(AppPath, "routers", "commentsRouter.go")) + if err != nil { + panic(err) + } + defer f.Close() + f.WriteString(strings.Replace(globalRouterTemplate, "{{.globalinfo}}", globalinfo, -1)) + } } diff --git a/router.go b/router.go index 33363be5..ccb1399c 100644 --- a/router.go +++ b/router.go @@ -559,10 +559,6 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) http.Error(w, "Method Not Allowed", 405) goto Admin } - //static file server - if serverStaticRouter(context) { - goto Admin - } if !context.Input.IsGet() && !context.Input.IsHead() { if CopyRequestBody && !context.Input.IsUpload() { @@ -575,6 +571,11 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) goto Admin } + //static file server + if serverStaticRouter(context) { + goto Admin + } + if context.Input.RunController != nil && context.Input.RunMethod != "" { findrouter = true runMethod = context.Input.RunMethod @@ -666,6 +667,8 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) } } + execController.URLMapping() + if !w.started { //exec main logic switch runMethod { @@ -684,9 +687,11 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) case "Options": execController.Options() default: - in := make([]reflect.Value, 0) - method := vc.MethodByName(runMethod) - method.Call(in) + if !execController.HandlerFunc(runMethod) { + in := make([]reflect.Value, 0) + method := vc.MethodByName(runMethod) + method.Call(in) + } } //render template