【发布时间】:2022-01-11 11:36:14
【问题描述】:
我们将不胜感激,显然我遗漏了一些非常简单的东西。
我已经创建了一个简单的测试平台,用于将对不同方法的调用路由到不同的处理程序。
相反,简单的 get 处理程序正在获取所有 get 请求,并且无法识别 delete 和 put!
所以 localhost:8080/users 和
localhost:8080/users?id=1
得到。路由到 getUsers 路由。这个问题的答案一定是微不足道的,但我看不到它,因此您的帮助将不胜感激。
下面是测试台的完整列表
package main
import (
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"log"
"net/http"
)
type User struct {
Id string `json:"id"`
Name string `json:"name"`
}
type Users []User
var users = Users{
User{
Id: "1",
Name: "Tula",
},
User{
Id: "2",
Name: "Monty",
},
User{
"3",
"Merry",
},
User{
Id: "4",
Name: "Paddy",
},
User{
Id: "5",
Name: "Hendrix",
},
User{
Id: "6",
Name: "Purdy",
},
User{
Id: "7",
Name: "turnip",
},
}
func main() {
r := mux.NewRouter()
r.Path("/users/{id:[0-9]+}").
Queries("id", "{id:[0-9]*?}").
Methods(http.MethodGet).
HandlerFunc(getUser).
Name("getUser")
r.Path("/users").
Methods(http.MethodGet).
HandlerFunc(getUsers).
Name("getUsers")
r.Path("/users").
Methods(http.MethodPost).
HandlerFunc(CreateUser).
Name("CreateUser")
r.Path("/users/{id:[0-9]+}").
Queries("id", "{id:[0-9]*?}").
Methods(http.MethodPut).
HandlerFunc(updateUser).
Name("updateUser")
r.Path("/users/{id:[0-9]+}").
Queries("id", "{id:[0-9]*?}").
Methods(http.MethodDelete).
HandlerFunc(deleteUser).
Name("deleteUser")
log.Fatal(http.ListenAndServe(":8080", r))
}
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
err := json.NewEncoder(w).Encode(users)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
} else {
_, _ = fmt.Fprintf(w, "GetUsers!")
}
}
func getUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
_, _ = fmt.Fprintf(w, "GetUser!")
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
_, _ = fmt.Fprintf(w, "CreateUser!")
var newUser User
err := json.NewDecoder(r.Body).Decode(&newUser)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
} else {
users = append(users, newUser)
_ = json.NewEncoder(w).Encode(users)
}
}
func updateUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
_, _ = fmt.Fprintf(w, "Update!")
}
func deleteUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
_, _ = fmt.Fprintf(w, "Delete!")
}
【问题讨论】: