Error Handler

所有的错误最终都会被 Tango.ErrHandler 进行处理。

你可以自定义你的错误处理方式来替代默认的。例如:

  1. var (
  2. prefix = "<html><head>tango</head><body><div>"
  3. suffix = fmt.Sprintf("</div><div>version: %s</div></body></html>", tango.Version())
  4. )
  5. o := tango.Classic()
  6. o.ErrHandler = tango.HandlerFunc(func(ctx *Context) {
  7. ctx.Write([]byte(prefix))
  8. switch res := ctx.Result.(type) {
  9. case tango.AbortError:
  10. ctx.WriteHeader(res.Code())
  11. ctx.Write([]byte(res.Error()))
  12. case error:
  13. ctx.WriteHeader(http.StatusInternalServerError)
  14. ctx.Write([]byte(res.Error()))
  15. case []byte:
  16. ctx.WriteHeader(http.StatusInternalServerError)
  17. ctx.Write(res)
  18. case string:
  19. ctx.WriteHeader(http.StatusInternalServerError)
  20. ctx.Write([]byte(res))
  21. default:
  22. ctx.WriteHeader(http.StatusInternalServerError)
  23. ctx.Write([]byte(http.StatusText(http.StatusInternalServerError)))
  24. }
  25. ctx.Write([]byte(suffix))
  26. })