gpt4 book ai didi

http - 用户存在时服务器返回 400

转载 作者:数据小太阳 更新时间:2023-10-29 03:20:30 25 4
gpt4 key购买 nike

我正在用 Go 进行一些测试,过去 2 天我一直在努力让它工作,但我做不到。我的问题是,即使用户确实存在,测试也会返回 400。

这是我的 getUser 函数

func (handler *UserHandler) getUser(w http.ResponseWriter, ID int) {
logfile, err := os.OpenFile("events.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("Error opening file: %v", err)
}
defer logfile.Close()
log.SetOutput(logfile)

user := db.Fetch(ID)

userJSON, err := json.Marshal(user)
if err != nil {
log.Printf("Error while marshaling the user into JSON: %v", err)
return
}

w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)

// userJSON is sent as http Response
w.Write(userJSON)
}

这是我的用户处理器

type UserHandler struct{}

func (handle *UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
var head string
head, r.URL.Path = ShiftPath(r.URL.Path)
id, err := strconv.Atoi(head)
if err != nil {
http.Error(w, fmt.Sprintf("Invalid user ID %q", head), http.StatusBadRequest)
return
}
switch r.Method {
case "GET":
handle.getUser(w, id)
default:
http.Error(w, "Only GET is allowed", http.StatusMethodNotAllowed)
}
}

func ShiftPath(p string) (head, tail string) {
p = path.Clean("/" + p)
i := strings.Index(p[1:], "/") + 1
if i <= 0 {
return p[1:], "/"
}
return p[1:i], p[i:]
}

这是我的测试

func TestGetUser(t *testing.T) {
handler := new(UserHandler)
mux := http.NewServeMux()
mux.HandleFunc("/user/", handler.ServeHTTP)

writer := httptest.NewRecorder()
request, _ := http.NewRequest("GET", "/user/12", nil)
mux.ServeHTTP(writer, request)

if writer.Code != 200 {
t.Errorf("Response code is %v", writer.Code)
}
}

最佳答案

代码问题 ====> id, err := strconv.Atoi(head)由于错误,您会看到返回,因此您会看到 400 错误。

让您的服务器代码充分发挥作用并具有有效的逻辑。

建议:始终逐行打印或调试。您可以找到问题和根本原因。

关于http - 用户存在时服务器返回 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com