Обработка пустой гориллы / мукса Голанга - PullRequest
0 голосов
/ 22 марта 2019

У меня есть следующая функция контроллера, которая должна удалять элемент в коллекции.Я использую пакет gorilla/mux.Проблема возникает, когда я пытаюсь обработать случай, когда пользователь забыл отправить идентификатор по запросу DELETE.

localhost:8000/movies/ или localhost:8000/movies

В то время как пример правильного запроса будетbe

localhost:8000/movies/3

Хотя params["id"] пусто, выполнение никогда не переходит в блок else.Я не уверен, почему.

func (c Controller) Delete(db *sql.DB) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        var error Error
        params := mux.Vars(r)

        movieRepo := movieRepo.MovieRepository{}

        if _, ok := params["id"]; ok {
            id, err := strconv.Atoi(params["id"])

            if err != nil {
                error.Message = "Server error"
                utils.SendError(w, http.StatusInternalServerError, error)
                return
            }

            rowsDeleted, err := movieRepo.delete(db, id)

            w.Header().Set("Content-Type", "text/plain")
            successMessage(w, rowsDeleted)
        } else {
            fmt.Println("errrr..")
            error.Message = "Id is not present."
        errorMessage(w, http.StatusBadRequest, error)
            return
        }
    }
}

РЕДАКТИРОВАТЬ

Вот как конечная точка регистрируется на маршрутизаторе:

router.HandleFunc("/movies/{id}",controller.Delete(db)).Methods("DELETE")
...