mirror of
https://github.com/mainnika/nikita-tokarch-uk.git
synced 2026-05-25 01:03:35 +00:00
Implement any-error handler
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
package renderer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"code.tokarch.uk/mainnika/nikita-tokarch-uk/frontend/content"
|
||||
routing "github.com/jackwhelpton/fasthttp-routing/v2"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// errorNotFound renders http error-404 template
|
||||
@@ -12,3 +16,39 @@ func (r *Renderer) errorNotFound(c *routing.Context) (err error) {
|
||||
|
||||
return c.Write(errorContent)
|
||||
}
|
||||
|
||||
// useErrorHandler is the middleware that catch handlers errors and render error template
|
||||
func (r *Renderer) useErrorHandler(c *routing.Context) (err error) {
|
||||
|
||||
worker := func() (err error) {
|
||||
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r == nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = routing.NewHTTPError(http.StatusInternalServerError,
|
||||
fmt.Sprintf("panic:\n%v", r))
|
||||
}()
|
||||
|
||||
err = c.Next()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
err = worker()
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
c.Abort()
|
||||
|
||||
logrus.Warnf("Cannot process request, %v", err)
|
||||
|
||||
errorContent := content.Error{
|
||||
Message: err.Error(),
|
||||
}
|
||||
|
||||
return c.Write(errorContent)
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ func (r *Renderer) init() {
|
||||
router := routing.New()
|
||||
|
||||
router.Use(r.useTemplateWriter)
|
||||
router.Use(r.useErrorHandler)
|
||||
router.NotFound(r.errorNotFound)
|
||||
|
||||
r.router = router
|
||||
|
||||
Reference in New Issue
Block a user