mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 10:41:03 +01:00
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/kataras/iris/v12"
|
|
// "github.com/kataras/iris/v12/context"
|
|
)
|
|
|
|
func main() {
|
|
app := iris.New()
|
|
app.UseRouter(iris.Compression)
|
|
app.UseRouter(myErrorHandler)
|
|
|
|
app.Get("/", handler)
|
|
|
|
app.Listen(":8080")
|
|
}
|
|
|
|
func myErrorHandler(ctx iris.Context) {
|
|
recorder := ctx.Recorder()
|
|
|
|
defer func() {
|
|
var err error
|
|
|
|
if v := recover(); v != nil { // panic
|
|
if panicErr, ok := v.(error); ok {
|
|
err = panicErr
|
|
} else {
|
|
err = errors.New(fmt.Sprint(v))
|
|
}
|
|
} else { // custom error.
|
|
err = ctx.GetErr()
|
|
}
|
|
|
|
if err != nil {
|
|
// To keep compression after reset:
|
|
// clear body and any headers created between recorder and handler.
|
|
recorder.ResetBody()
|
|
recorder.ResetHeaders()
|
|
//
|
|
|
|
// To disable compression after reset:
|
|
// recorder.Reset()
|
|
// recorder.ResponseWriter.(*context.CompressResponseWriter).Disabled = true
|
|
//
|
|
|
|
ctx.StopWithJSON(iris.StatusInternalServerError, iris.Map{
|
|
"message": err.Error(),
|
|
})
|
|
}
|
|
}()
|
|
|
|
ctx.Next()
|
|
}
|
|
|
|
func handler(ctx iris.Context) {
|
|
ctx.WriteString("Content may fall")
|
|
ctx.Header("X-Test", "value")
|
|
|
|
// ctx.SetErr(fmt.Errorf("custom error message"))
|
|
panic("errr!")
|
|
}
|