From 940d2110d2648d9050b5062e53995a51059b2ea1 Mon Sep 17 00:00:00 2001 From: xgfone Date: Sun, 12 May 2024 13:53:26 +0800 Subject: [PATCH] rename context responder --- http/middleware/recover/recover.go | 2 +- http/reqresp/context.go | 64 ++++++++++++------------------ 2 files changed, 27 insertions(+), 39 deletions(-) diff --git a/http/middleware/recover/recover.go b/http/middleware/recover/recover.go index f7d2875..c4e4685 100644 --- a/http/middleware/recover/recover.go +++ b/http/middleware/recover/recover.go @@ -54,7 +54,7 @@ func wrappanic(w http.ResponseWriter, r *http.Request) { if !reqresp.WroteHeader(w) { w.Header().Set("X-Panic", "1") err := codeint.ErrInternalServerError.WithMessage("panic") - reqresp.DefaultResponder(w, r, result.Err(err)) + reqresp.DefaultRespond(w, r, result.Err(err)) } } diff --git a/http/reqresp/context.go b/http/reqresp/context.go index 435811b..fe026ca 100644 --- a/http/reqresp/context.go +++ b/http/reqresp/context.go @@ -118,7 +118,7 @@ type Context struct { // Responder is the result responder used by the method Respond. // - // If nil, use DefaultContextResponder instead. + // If nil, use DefaultContextRespond instead. Responder func(*Context, result.Response) // Query and Cookies are used to cache the parsed request query and cookies. @@ -571,47 +571,49 @@ func (c *Context) Respond(response result.Response) { if c.Responder != nil { c.Responder(c, response) } else { - DefaultContextResponder(c, response) + DefaultContextRespond(c, response) } } var ( - // DefaultResponder is the default result responder. - DefaultResponder = defaultResponder + // DefaultRespond is the default result responder. + DefaultRespond = defaultRespond - // DefaultContextResponder is the default result responder based on Context. - DefaultContextResponder = defaultContextResponder + // DefaultContextRespond is the default result responder based on Context. + DefaultContextRespond = defaultContextRespond - // DefaultContextResponderForCode is the default result responder - // based on Context and StatusCode. - DefaultContextResponderForStatusCode = defaultContextResponderForStatusCode + // DefaultContextRespondByCode is the default result responder + // based on Context and ResponseCode. + DefaultContextRespondByCode = defaultContextRespondByCode ) -// XResponseStatusCode is used to save the response status code -// in the request header or query. -var XResponseStatusCode = "X-Response-Status-Code" +func defaultRespond(w http.ResponseWriter, r *http.Request, response result.Response) { + if c := GetContext(r.Context()); c != nil { + DefaultContextRespond(c, response) + return + } -func getXStatusCode(c *Context, key string) (xcode string) { - xcode = c.Request.Header.Get(key) - if xcode == "" { - xcode = c.GetQuery(key) + rw, ok := w.(ResponseWriter) + if !ok { + rw = AcquireResponseWriter(w) + defer ReleaseResponseWriter(rw) } - return + DefaultContextRespond(&Context{ResponseWriter: rw, Request: r}, response) } -func defaultContextResponder(c *Context, response result.Response) { +func defaultContextRespond(c *Context, response result.Response) { var xcode string if c.Request != nil { - xcode = getXStatusCode(c, XResponseStatusCode) - if xcode == "" && XResponseStatusCode != "X-Response-Code" { - // Compatible with the old - xcode = getXStatusCode(c, "X-Response-Code") + const XResponseCode = "X-Response-Code" + xcode = c.Request.Header.Get(XResponseCode) + if xcode == "" { + xcode = c.GetQuery(XResponseCode) } } - DefaultContextResponderForStatusCode(c, xcode, response) + DefaultContextRespondByCode(c, xcode, response) } -func defaultContextResponderForStatusCode(c *Context, xcode string, response result.Response) { +func defaultContextRespondByCode(c *Context, xcode string, response result.Response) { if response.Error == nil { c.JSON(200, response.Data) } else { @@ -619,20 +621,6 @@ func defaultContextResponderForStatusCode(c *Context, xcode string, response res } } -func defaultResponder(w http.ResponseWriter, r *http.Request, response result.Response) { - if c := GetContext(r.Context()); c != nil { - DefaultContextResponder(c, response) - return - } - - rw, ok := w.(ResponseWriter) - if !ok { - rw = AcquireResponseWriter(w) - defer ReleaseResponseWriter(rw) - } - DefaultContextResponder(&Context{ResponseWriter: rw, Request: r}, response) -} - /// ----------------------------------------------------------------------- /// type byteswrappper struct {