当内部服务器错误发生时,我想要一个自定义错误页面。目前,我的错误用panic
.
有没有一种干净的方法来提供这个功能,例如panic
在这种情况下猴子补丁的东西,而不是用panic
调用一些自定义页面渲染函数来替换每个实例?
这是一个最小的例子:
// server.go
package main
import (
"errors"
"net/http"
"github.com/go-martini/martini"
"github.com/martini-contrib/render"
)
func main() {
m := martini.Classic()
m.Use(render.Renderer())
m.Get("/", func(r render.Render) {
r.HTML(http.StatusOK, "home", "World")
})
m.Get("/somethingbad", func(r render.Render) {
err := errors.New("My bad error")
if err != nil {
panic(err)
// can do this, but wondering if there's a better way:
// r.HTML(http.StatusInternalServerError, "500", err.Error())
}
})
m.Run()
}
<!-- templates/home.tmpl -->
<html>
<body>
Hello, {{.}}!
<br />
<a href="/somethingbad">Go here</a>
</body>
</html>
<!-- templates/500.tmpl -->
<html>
<body>
500 error: {{.}}
</body>
</html>