В нашей программе есть несколько мест, где ошибки игнорируются. Это плохая практика, не в последнюю очередь потому, что, когда ошибка происходит, программа будет иметь непреднамеренное поведение. Лучшее решение - обработать ошибки и вернуть сообщение об ошибке пользователю. Таким образом, если что-то пойдет не так, сервер будет функционировать именно так, как мы хотим, и пользователь может быть уведомлен.
Сначала давайте обработаем ошибки в renderTemplate
:
func renderTemplate(w http.ResponseWriter,
tmpl string, p *Page) {
t, err := template.ParseFiles(tmpl + ".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)
}
}
Функция http.Error
отправляет указанный код HTTP ответа (в данном случае "Internal Server Error") и сообщение об ошибке. Решение о том, чтобы поместить обработку шаблонов в отдельную функцию, уже окупается.
Теперь давайте исправим 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)
return
}
http.Redirect(w, r, "/view/"+title, http.StatusFound)
}
О любых ошибках, возникающих во время p.save()
, будет сообщено пользователю.
Читайте также:
- Веб-приложение на Go: введение
- Веб-приложение на Go: структуры данных, сохранение и загрузка страницы
- Веб-приложение на Go: введение в пакет net/http, пример веб-сервера на Go
- Веб-приложение на Go: использование net/http для обслуживания вики-страниц
- Веб-приложение на Go: редактирование страниц, пакет html/template
- Веб-приложение на Go: обработка несуществующих страниц, сохранение страниц
Комментариев нет:
Отправить комментарий