feat(smalltrip,problem): panic middleware
This commit is contained in:
@@ -17,11 +17,29 @@ package problem
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"forge.capytal.company/loreddev/x/smalltrip/middleware"
|
"forge.capytal.company/loreddev/x/smalltrip/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO?: BufferedMiddleware, a middleware which can respond or redirect to
|
||||||
|
// a error page even after the first Write
|
||||||
|
|
||||||
|
func PanicMiddleware() middleware.Middleware {
|
||||||
|
return func(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
defer func() {
|
||||||
|
if rv := recover(); rv != nil {
|
||||||
|
err := fmt.Errorf("panic recovered: %+v", rv)
|
||||||
|
NewInternalServerError(err).ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Middleware(h Handler) middleware.Middleware {
|
func Middleware(h Handler) middleware.Middleware {
|
||||||
return func(next http.Handler) http.Handler {
|
return func(next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|||||||
Reference in New Issue
Block a user