Commit 31f862c5 authored by vadimi's avatar vadimi

Panic template execution errors to show error pages accordingly

parent 505fca93
......@@ -138,6 +138,7 @@ func (c *Controller) RenderBytes() ([]byte, error) {
err := BeeTemplates[c.TplNames].ExecuteTemplate(newbytes, c.TplNames, c.Data)
if err != nil {
Trace("template Execute err:", err)
return nil, err
}
tplcontent, _ := ioutil.ReadAll(newbytes)
c.Data["LayoutContent"] = template.HTML(string(tplcontent))
......@@ -145,6 +146,7 @@ func (c *Controller) RenderBytes() ([]byte, error) {
err = BeeTemplates[c.Layout].ExecuteTemplate(ibytes, c.Layout, c.Data)
if err != nil {
Trace("template Execute err:", err)
return nil, err
}
icontent, _ := ioutil.ReadAll(ibytes)
return icontent, nil
......@@ -163,6 +165,7 @@ func (c *Controller) RenderBytes() ([]byte, error) {
err := BeeTemplates[c.TplNames].ExecuteTemplate(ibytes, c.TplNames, c.Data)
if err != nil {
Trace("template Execute err:", err)
return nil, err
}
icontent, _ := ioutil.ReadAll(ibytes)
return icontent, nil
......
......@@ -26,7 +26,10 @@ const (
FinishRouter
)
var HTTPMETHOD = []string{"get", "post", "put", "delete", "patch", "options", "head"}
var (
HTTPMETHOD = []string{"get", "post", "put", "delete", "patch", "options", "head"}
errorType = reflect.TypeOf((*error)(nil)).Elem()
)
type controllerInfo struct {
pattern string
......@@ -729,7 +732,7 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
if !w.started && !context.Input.IsWebsocket() {
if AutoRender {
method = vc.MethodByName("Render")
method.Call(in)
callMethodWithError(method, in)
}
}
}
......@@ -920,3 +923,15 @@ func (w *responseWriter) WriteHeader(code int) {
w.started = true
w.writer.WriteHeader(code)
}
// call method and panic with error if error is in result params
func callMethodWithError(method reflect.Value, params []reflect.Value) {
results := method.Call(params)
if len(results) > 0 {
for _, result := range results {
if result.Type() == errorType && !result.IsNil() {
panic(result.Interface().(error))
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment