вторник, 5 февраля 2019 г.

Веб-приложение на Go: обработка несуществующих страниц, сохранение страниц

Обработка несуществующих страниц

Что если вы посетите /view/APageThatDoesntExist? Вы увидите страницу, содержащую HTML. Это потому, что он игнорирует возвращаемое значение ошибки из loadPage и продолжает пытаться заполнить шаблон без данных. Вместо этого, если запрошенная страница не существует, она должна перенаправлять клиента на страницу редактирования, чтобы создать контент:

func viewHandler(w http.ResponseWriter, r *http.Request) {
    title := r.URL.Path[len("/view/"):]
    p, err := loadPage(title)
    if err != nil {
        http.Redirect(w, r, "/edit/"+title, 
                      http.StatusFound)
        return
    }
    renderTemplate(w, "view", p)
}

Функция http.Redirect добавляет код статуса HTTP http.StatusFound(302) и Location заголовок к HTTP ответу.

Сохранение страниц

Функция saveHandler будет обрабатывать отправку форм, которые находятся на страницах редактирования. После раскомментирования соответствующей строки в main, давайте реализуем обработчик:

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)}
    p.save()
    http.Redirect(w, r, "/view/"+title, http.StatusFound)
}

Заголовок страницы (указан в URL) и единственное поле формы, Body хранятся на новой Page. Затем вызывается метод save() для записи данных в файл, и клиент перенаправляется на страницу /view/.

Значение, возвращаемое FormValue, имеет тип string. Мы должны преобразовать это значение в []byte, прежде чем оно уместится в структуре Page. Мы используем []byte(body) для выполнения преобразования.


Читайте также:


Комментариев нет:

Отправить комментарий