【Go】Echoで404ページと500ページを表示
Echoを使っていてデフォルトのままで存在しないURLにアクセスするとNotFoundのJSONがレスポンスとして返される。
今回はAPIでなくてサイトを作りたかったのでHTMLを返したかった。
ちょっとやり方がわからなかったので今回は以下のように対応した。
Echoで定義されているHTTPErrorHandlerを上書きすることでハンドリングできたのでここでHTTPステータスをみてテンプレートを切り替えるように対応してみた
server.go
package main
import (
"io"
"strconv"
"errors"
"net/http"
"html/template"
"github.com/labstack/echo"
)
var NotFoundError = errors.New("NotFound")
type Template struct {
templates *template.Template
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
func main() {
t := &Template{
templates: template.Must(template.ParseGlob("public/views/*.html")),
}
e := echo.New()
e.Use(middleware.Recover())
e.Renderer = t
e.HTTPErrorHandler = func(err error, c echo.Context) {
if he, ok := err.(*echo.HTTPError); ok {
if he.Code == 404 {
c.Render(http.StatusNotFound,"404",nil)
} else {
c.Render(http.StatusInternalServerError,"500",nil)
}
}
}
・・・
}404エラーと500エラーのテンプレートを準備
views/404.html
{{define "404"}}
Not Found
{{end}}views/500.html
{{define "500"}}
Server Error
{{end}}こんなやり方がいいのか不明です。。。以上です