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
|
package renderer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"code.tokarch.uk/mainnika/nikita-tokarch-uk/frontend/content"
|
"code.tokarch.uk/mainnika/nikita-tokarch-uk/frontend/content"
|
||||||
routing "github.com/jackwhelpton/fasthttp-routing/v2"
|
routing "github.com/jackwhelpton/fasthttp-routing/v2"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// errorNotFound renders http error-404 template
|
// errorNotFound renders http error-404 template
|
||||||
@@ -12,3 +16,39 @@ func (r *Renderer) errorNotFound(c *routing.Context) (err error) {
|
|||||||
|
|
||||||
return c.Write(errorContent)
|
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 := routing.New()
|
||||||
|
|
||||||
router.Use(r.useTemplateWriter)
|
router.Use(r.useTemplateWriter)
|
||||||
|
router.Use(r.useErrorHandler)
|
||||||
router.NotFound(r.errorNotFound)
|
router.NotFound(r.errorNotFound)
|
||||||
|
|
||||||
r.router = router
|
r.router = router
|
||||||
|
|||||||
Reference in New Issue
Block a user