diff --git a/handler.go b/handler.go index 489f5c7..9083678 100644 --- a/handler.go +++ b/handler.go @@ -559,6 +559,7 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { if r.Body != nil { var buf []byte buf, err = io.ReadAll(r.Body) + r.Body.Close() if err != nil && err != io.EOF { h.errorHandler(ctx, handler, w, r, err, http.StatusInternalServerError) return diff --git a/util_test.go b/util_test.go index 76c7cd3..0afa8b3 100644 --- a/util_test.go +++ b/util_test.go @@ -3,6 +3,9 @@ package http import ( "bytes" "context" + "fmt" + "go.unistack.org/micro/v3/options" + "go.unistack.org/micro/v3/server" "net/http" "strings" "testing" @@ -54,3 +57,41 @@ func TestFillrequest(t *testing.T) { t.Fatalf("FillRequest error: %#+v", req) } } + +func Test_Hook(t *testing.T) { + opts := server.Options{} + + var fn server.HandlerFunc = func(fctx context.Context, req server.Request, rsp interface{}) (err error) { + fmt.Println("1") + return nil + } + + var fn2 server.HandlerWrapper = func(server.HandlerFunc) server.HandlerFunc { + return func(ctx context.Context, req server.Request, rsp interface{}) error { + fmt.Println("2") + return nil + } + } + var fn3 server.HandlerWrapper = func(server.HandlerFunc) server.HandlerFunc { + return func(ctx context.Context, req server.Request, rsp interface{}) error { + fmt.Println("3") + return nil + } + } + var fn4 server.HandlerWrapper = func(server.HandlerFunc) server.HandlerFunc { + return func(ctx context.Context, req server.Request, rsp interface{}) error { + fmt.Println("4") + return nil + } + } + + opts.Hooks = append(opts.Hooks, fn2, fn3, fn4) + + opts.Hooks.EachNext(func(hook options.Hook) { + if h, ok := hook.(server.HandlerWrapper); ok { + fn = h(fn) + } + }) + + fn(nil, nil, nil) +}