func MarshalResponseMiddleware(registry kit.Registry, request kit.Request, response kit.Response) (kit.Response, bool) { js, err := json.Marshal(response.GetData()) if err != nil { js = []byte(`{"errors": [{code: "response_marshal_error"}]}`) } response.SetRawData(js) return nil, false }
func ServerErrorMiddleware(registry kit.Registry, r kit.Request, response kit.Response) (kit.Response, bool) { err := response.GetError() if err == nil { return nil, false } status := 500 // If the error is an apperror, and it contains a status, // set it as the http status of the response. if apperr, ok := err.(apperror.Error); ok { if apperr.GetStatus() != 0 { status = apperr.GetStatus() } } response.SetHttpStatus(status) if response.GetRawData() != nil || response.GetRawDataReader() != nil { return nil, false } httpRequest := r.GetHttpRequest() apiPrefix := "/" + registry.Config().UString("api.prefix", "api") isApiRequest := strings.HasPrefix(httpRequest.URL.Path, apiPrefix) if isApiRequest { return nil, false } data := map[string]interface{}{"errors": []error{response.GetError()}} tpl := defaultErrorTpl() tplPath := registry.Config().UString("frontend.errorTemplate") if tplPath != "" { t, err := template.ParseFiles(tplPath) if err != nil { registry.Logger().Fatalf("Could not parse error template at '%v': %v", tplPath, err) } else { tpl = t } } var buffer *bytes.Buffer if err := tpl.Execute(buffer, data); err != nil { registry.Logger().Fatalf("Could not render error template: %v\n", err) response.SetRawData([]byte("Server error")) } else { response.SetRawData(buffer.Bytes()) } return nil, false }