From 5b43293eb3fb44643a83aa19b56d28facd5928a7 Mon Sep 17 00:00:00 2001 From: vicanso Date: Thu, 3 Jun 2021 20:33:12 +0800 Subject: [PATCH] refactor: adjust error handle --- context.go | 18 +++++++++--------- context_test.go | 3 +-- elton.go | 31 ++++++++++++++++--------------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/context.go b/context.go index 83a609e..a4b0302 100644 --- a/context.go +++ b/context.go @@ -155,10 +155,9 @@ func GetRealIP(req *http.Request) string { // if not exists then it will get ip from x-real-ip from request header, // if not exists then it will use remote addr. func (c *Context) RealIP() string { - if c.realIP != "" { - return c.realIP + if c.realIP == "" { + c.realIP = GetRealIP(c.Request) } - c.realIP = GetRealIP(c.Request) return c.realIP } @@ -183,11 +182,10 @@ func GetClientIP(req *http.Request) string { return strings.TrimSpace(arr[0]) } } + // x-real-ip为前置设置,如果有,则直接认为是客户IP ip = h.Get(HeaderXRealIP) if ip != "" { - if !intranetip.Is(net.ParseIP(ip)) { - return ip - } + return ip } return GetRemoteAddr(req) } @@ -197,10 +195,9 @@ func GetClientIP(req *http.Request) string { // if not exists then it will get ip from x-real-ip from request header, // if not exists then it will use remote addr. func (c *Context) ClientIP() string { - if c.clientIP != "" { - return c.clientIP + if c.clientIP == "" { + c.clientIP = GetClientIP(c.Request) } - c.clientIP = GetClientIP(c.Request) return c.clientIP } @@ -467,6 +464,7 @@ func (c *Context) GetSignedCookie(name string) (cookie *http.Cookie, index int, } sc, err := c.Cookie(name + SignedCookieSuffix) + // 如果获取失败,则获取不到cookie if err != nil { cookie = nil return @@ -482,6 +480,7 @@ func (c *Context) SignedCookie(name string) (cookie *http.Cookie, err error) { if err != nil { return } + // 如果校验失败,返回无cookie的错误 if index < 0 { cookie = nil err = http.ErrNoCookie @@ -505,6 +504,7 @@ func (c *Context) SendFile(file string) (err error) { c.SetHeader(HeaderLastModified, lmd) } } + // elton对于实现了closer的会自动调用关闭 r, err := os.Open(file) if err != nil { return diff --git a/context_test.go b/context_test.go index 9f2ffc1..be7fc57 100644 --- a/context_test.go +++ b/context_test.go @@ -192,12 +192,11 @@ func TestGetClientIP(t *testing.T) { }, ip: "1.1.1.1", }, - // x-real-ip is local ip, so get by remote addr + // get by remote addr { newContext: func() *Context { req := httptest.NewRequest("GET", "/", nil) req.RemoteAddr = "192.168.1.1:7000" - req.Header.Set(HeaderXRealIP, "192.168.0.1") c := NewContext(nil, req) return c }, diff --git a/elton.go b/elton.go index abc2be0..d2ea48a 100644 --- a/elton.go +++ b/elton.go @@ -382,24 +382,25 @@ func (e *Elton) Handle(method, path string, handlerList ...Handler) *Elton { return } c.Committed = true + // 如果出错则触发出错处理,返回 if err != nil { e.error(c, err) - } else { - if c.StatusCode != 0 { - c.Response.WriteHeader(c.StatusCode) + return + } + if c.StatusCode != 0 { + c.Response.WriteHeader(c.StatusCode) + } + if c.BodyBuffer != nil { + c.SetHeader(HeaderContentLength, strconv.Itoa(c.BodyBuffer.Len())) + _, responseErr := c.Response.Write(c.BodyBuffer.Bytes()) + if responseErr != nil { + e.EmitError(c, responseErr) } - if c.BodyBuffer != nil { - c.SetHeader(HeaderContentLength, strconv.Itoa(c.BodyBuffer.Len())) - _, responseErr := c.Response.Write(c.BodyBuffer.Bytes()) - if responseErr != nil { - e.EmitError(c, responseErr) - } - } else if c.IsReaderBody() { - r, _ := c.Body.(io.Reader) - _, pipeErr := c.Pipe(r) - if pipeErr != nil { - e.EmitError(c, pipeErr) - } + } else if c.IsReaderBody() { + r, _ := c.Body.(io.Reader) + _, pipeErr := c.Pipe(r) + if pipeErr != nil { + e.EmitError(c, pipeErr) } } })