У меня есть следующая функция контроллера, которая должна удалять элемент в коллекции.Я использую пакет 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")