mirror of
https://github.com/kataras/iris.git
synced 2026-01-08 12:31:58 +00:00
Release version 12.2.0-beta2
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
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!")
|
||||
}
|
||||
Reference in New Issue
Block a user