我具有以下控制器功能,应该删除集合中的项目。我正在使用gorilla/mux
软件包。当我尝试处理用户忘记在DELETE请求上发送ID的情况时,就会出现问题。
localhost:8000/movies/
或localhost:8000/movies
一个适当请求的示例是
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")