前面的分享加了兩個功能,一個是編輯功能,一個保存功能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