前面的分享加了两个功能,一个是编辑功能,一个保存功能html
在咱们的程序中有几个地方实际上是忽略了错误的处理。
这是很差的作法,尤为是由于这样的作法发生错误时,程序会出现意外行为。
更好的解决方案是处理错误并向用户返回错误消息。
这样,若是出现问题,服务器将彻底按照咱们想要的方式运行,而且能够通知用户。
首先,让咱们处理renderTemplate中的错误:服务器
func renderTemplate(w http.ResponseWriter, templateName string, p *Page) { t, err := template.ParseFiles("template/" + templateName + ".html") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } err = t.Execute(w, p) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }
http.Error函数发送指定的HTTP响应代码(在本例中为“内部服务器错误”)和错误消息。
将这个放在一个单独的功能中的决定已经取得了成效。
如今让咱们修复saveHandler:函数
func saveHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[len("/save/"):] body := r.FormValue("body") p := &Page{ Title: title, Body: []byte(body), } err := p.save() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } http.Redirect(w, r, "/view/"+title, http.StatusFound) }
p.save()期间发生的任何错误都将报告给用户code