0

当内部服务器错误发生时,我想要一个自定义错误页面。目前,我的错误用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>
4

0 回答 0